1
- import { of } from 'rxjs' ;
1
+ import { forkJoin , of } from 'rxjs' ;
2
2
import { createEffect , getCreateEffectMetadata } from '../src/effect_creator' ;
3
3
4
4
describe ( 'createEffect()' , ( ) => {
@@ -12,7 +12,7 @@ describe('createEffect()', () => {
12
12
const effect = createEffect ( ( ) => of ( { type : 'a' } ) ) ;
13
13
14
14
expect ( effect [ '__@ngrx/effects_create__' ] ) . toEqual (
15
- jasmine . objectContaining ( { dispatch : true } )
15
+ expect . objectContaining ( { dispatch : true } )
16
16
) ;
17
17
} ) ;
18
18
@@ -22,7 +22,7 @@ describe('createEffect()', () => {
22
22
} ) ;
23
23
24
24
expect ( effect [ '__@ngrx/effects_create__' ] ) . toEqual (
25
- jasmine . objectContaining ( { dispatch : true } )
25
+ expect . objectContaining ( { dispatch : true } )
26
26
) ;
27
27
} ) ;
28
28
@@ -32,7 +32,7 @@ describe('createEffect()', () => {
32
32
} ) ;
33
33
34
34
expect ( effect [ '__@ngrx/effects_create__' ] ) . toEqual (
35
- jasmine . objectContaining ( { dispatch : false } )
35
+ expect . objectContaining ( { dispatch : false } )
36
36
) ;
37
37
} ) ;
38
38
@@ -42,7 +42,78 @@ describe('createEffect()', () => {
42
42
} ) ;
43
43
44
44
expect ( effect [ '__@ngrx/effects_create__' ] ) . toEqual (
45
- jasmine . objectContaining ( { dispatch : false } )
45
+ expect . objectContaining ( { dispatch : false } )
46
+ ) ;
47
+ } ) ;
48
+
49
+ it ( 'should create a non-functional effect by default' , ( ) => {
50
+ const obs$ = of ( { type : 'a' } ) ;
51
+ const effect = createEffect ( ( ) => obs$ ) ;
52
+
53
+ expect ( effect ) . toBe ( obs$ ) ;
54
+ expect ( effect [ '__@ngrx/effects_create__' ] ) . toEqual (
55
+ expect . objectContaining ( { functional : false } )
56
+ ) ;
57
+ } ) ;
58
+
59
+ it ( 'should be possible to explicitly create a non-functional effect' , ( ) => {
60
+ const obs$ = of ( { type : 'a' } ) ;
61
+ const effect = createEffect ( ( ) => obs$ , { functional : false } ) ;
62
+
63
+ expect ( effect ) . toBe ( obs$ ) ;
64
+ expect ( effect [ '__@ngrx/effects_create__' ] ) . toEqual (
65
+ expect . objectContaining ( { functional : false } )
66
+ ) ;
67
+ } ) ;
68
+
69
+ it ( 'should be possible to create a functional effect' , ( ) => {
70
+ const source = ( ) => of ( { type : 'a' } ) ;
71
+ const effect = createEffect ( source , { functional : true } ) ;
72
+
73
+ expect ( effect ) . toBe ( source ) ;
74
+ expect ( effect [ '__@ngrx/effects_create__' ] ) . toEqual (
75
+ expect . objectContaining ( { functional : true } )
76
+ ) ;
77
+ } ) ;
78
+
79
+ it ( 'should be possible to invoke functional effect as function' , ( done ) => {
80
+ const sum = createEffect ( ( x = 10 , y = 20 ) => of ( x + y ) , {
81
+ functional : true ,
82
+ dispatch : false ,
83
+ } ) ;
84
+
85
+ forkJoin ( [ sum ( ) , sum ( 100 , 200 ) ] ) . subscribe ( ( [ defaultResult , result ] ) => {
86
+ expect ( defaultResult ) . toBe ( 30 ) ;
87
+ expect ( result ) . toBe ( 300 ) ;
88
+ done ( ) ;
89
+ } ) ;
90
+ } ) ;
91
+
92
+ it ( 'should use effects error handler by default' , ( ) => {
93
+ const effect = createEffect ( ( ) => of ( { type : 'a' } ) ) ;
94
+
95
+ expect ( effect [ '__@ngrx/effects_create__' ] ) . toEqual (
96
+ expect . objectContaining ( { useEffectsErrorHandler : true } )
97
+ ) ;
98
+ } ) ;
99
+
100
+ it ( 'should be possible to explicitly create an effect with error handler' , ( ) => {
101
+ const effect = createEffect ( ( ) => of ( { type : 'a' } ) , {
102
+ useEffectsErrorHandler : true ,
103
+ } ) ;
104
+
105
+ expect ( effect [ '__@ngrx/effects_create__' ] ) . toEqual (
106
+ expect . objectContaining ( { useEffectsErrorHandler : true } )
107
+ ) ;
108
+ } ) ;
109
+
110
+ it ( 'should be possible to create an effect without error handler' , ( ) => {
111
+ const effect = createEffect ( ( ) => of ( { type : 'a' } ) , {
112
+ useEffectsErrorHandler : false ,
113
+ } ) ;
114
+
115
+ expect ( effect [ '__@ngrx/effects_create__' ] ) . toEqual (
116
+ expect . objectContaining ( { useEffectsErrorHandler : false } )
46
117
) ;
47
118
} ) ;
48
119
@@ -54,12 +125,15 @@ describe('createEffect()', () => {
54
125
c = createEffect ( ( ) => of ( { type : 'c' } ) , { dispatch : false } ) ;
55
126
d = createEffect ( ( ) => of ( { type : 'd' } ) , {
56
127
useEffectsErrorHandler : true ,
128
+ functional : false ,
57
129
} ) ;
58
130
e = createEffect ( ( ) => of ( { type : 'd' } ) , {
59
131
useEffectsErrorHandler : false ,
132
+ functional : true ,
60
133
} ) ;
61
134
f = createEffect ( ( ) => of ( { type : 'e' } ) , {
62
135
dispatch : false ,
136
+ functional : true ,
63
137
useEffectsErrorHandler : false ,
64
138
} ) ;
65
139
g = createEffect ( ( ) => of ( { type : 'e' } ) , {
@@ -71,18 +145,54 @@ describe('createEffect()', () => {
71
145
const mock = new Fixture ( ) ;
72
146
73
147
expect ( getCreateEffectMetadata ( mock ) ) . toEqual ( [
74
- { propertyName : 'a' , dispatch : true , useEffectsErrorHandler : true } ,
75
- { propertyName : 'b' , dispatch : true , useEffectsErrorHandler : true } ,
76
- { propertyName : 'c' , dispatch : false , useEffectsErrorHandler : true } ,
77
- { propertyName : 'd' , dispatch : true , useEffectsErrorHandler : true } ,
78
- { propertyName : 'e' , dispatch : true , useEffectsErrorHandler : false } ,
79
- { propertyName : 'f' , dispatch : false , useEffectsErrorHandler : false } ,
80
- { propertyName : 'g' , dispatch : true , useEffectsErrorHandler : false } ,
148
+ {
149
+ propertyName : 'a' ,
150
+ dispatch : true ,
151
+ functional : false ,
152
+ useEffectsErrorHandler : true ,
153
+ } ,
154
+ {
155
+ propertyName : 'b' ,
156
+ dispatch : true ,
157
+ functional : false ,
158
+ useEffectsErrorHandler : true ,
159
+ } ,
160
+ {
161
+ propertyName : 'c' ,
162
+ dispatch : false ,
163
+ functional : false ,
164
+ useEffectsErrorHandler : true ,
165
+ } ,
166
+ {
167
+ propertyName : 'd' ,
168
+ dispatch : true ,
169
+ functional : false ,
170
+ useEffectsErrorHandler : true ,
171
+ } ,
172
+ {
173
+ propertyName : 'e' ,
174
+ dispatch : true ,
175
+ functional : true ,
176
+ useEffectsErrorHandler : false ,
177
+ } ,
178
+ {
179
+ propertyName : 'f' ,
180
+ dispatch : false ,
181
+ functional : true ,
182
+ useEffectsErrorHandler : false ,
183
+ } ,
184
+ {
185
+ propertyName : 'g' ,
186
+ dispatch : true ,
187
+ functional : false ,
188
+ useEffectsErrorHandler : false ,
189
+ } ,
81
190
] ) ;
82
191
} ) ;
83
192
84
193
it ( 'should return an empty array if the effect has not been created with createEffect()' , ( ) => {
85
194
const fakeCreateEffect : any = ( ) => { } ;
195
+
86
196
class Fixture {
87
197
a = fakeCreateEffect ( ( ) => of ( { type : 'A' } ) ) ;
88
198
b = new Proxy (
0 commit comments