@@ -36,35 +36,41 @@ final class StoreTests: XCTestCase {
36
36
XCTAssertEqual ( values, [ 0 , 1 , 2 , 3 ] )
37
37
}
38
38
39
- func testEffectDisposablesDeinitialization( ) {
40
- enum Action {
41
- case triggerDelay
42
- case delayDidComplete
43
- }
44
- let delayedReducer = Reducer < Void , Action , DateScheduler > { _, action, mainQueue in
45
- switch action {
46
- case . triggerDelay:
47
- return Effect ( value: . delayDidComplete) . delay ( 1 , on: mainQueue)
39
+ func testCancellableIsRemovedOnImmediatelyCompletingEffect( ) {
40
+ let reducer = Reducer < Void , Void , Void > { _, _, _ in . none }
41
+ let store = Store ( initialState: ( ) , reducer : reducer , environment : ( ) )
42
+
43
+ XCTAssertEqual ( store. effectDisposables. count, 0 )
44
+
45
+ store. send ( ( ) )
46
+
47
+ XCTAssertEqual ( store. effectDisposables. count, 0 )
48
+ }
49
+
50
+ func testCancellableIsRemovedWhenEffectCompletes( ) {
51
+ let scheduler = TestScheduler ( )
52
+ let effect = Effect < Void , Never > ( value: ( ) )
53
+ . delay ( 1 , on: scheduler)
48
54
49
- case . delayDidComplete:
55
+ enum Action { case start, end }
56
+
57
+ let reducer = Reducer < Void , Action , Void > { _, action, _ in
58
+ switch action {
59
+ case . start:
60
+ return effect. map { . end }
61
+ case . end:
50
62
return . none
51
63
}
52
64
}
65
+ let store = Store ( initialState: ( ) , reducer : reducer , environment : ( ) )
53
66
54
- let store = Store (
55
- initialState: ( ) ,
56
- reducer: delayedReducer,
57
- environment: QueueScheduler . main
58
- )
67
+ XCTAssertEqual ( store. effectDisposables. count, 0 )
59
68
60
- store. send ( . triggerDelay)
61
- store. send ( . triggerDelay)
62
- store. send ( . triggerDelay)
63
- store. send ( . delayDidComplete)
69
+ store. send ( . start)
64
70
65
- XCTAssertEqual ( store. effectDisposables. count, 3 )
71
+ XCTAssertEqual ( store. effectDisposables. count, 1 )
66
72
67
- XCTWaiter ( ) . wait ( for : [ XCTestExpectation ( ) ] , timeout : 1.1 )
73
+ scheduler . advance ( by : 2 )
68
74
69
75
XCTAssertEqual ( store. effectDisposables. count, 0 )
70
76
}
0 commit comments