@@ -122,4 +122,87 @@ describe('Form.Dependencies', () => {
122
122
await changeValue ( getField ( wrapper , 1 ) , 'light' ) ;
123
123
matchError ( getField ( wrapper , 0 ) , false ) ;
124
124
} ) ;
125
+
126
+ it ( 'should work as a shortcut when name is not provided' , async ( ) => {
127
+ const spy = jest . fn ( ) ;
128
+ const wrapper = mount (
129
+ < Form >
130
+ < Field dependencies = { [ 'field_1' ] } >
131
+ { ( ) => {
132
+ spy ( ) ;
133
+ return 'gogogo' ;
134
+ } }
135
+ </ Field >
136
+ < Field name = "field_1" >
137
+ < Input />
138
+ </ Field >
139
+ < Field name = "field_2" >
140
+ < Input />
141
+ </ Field >
142
+ </ Form > ,
143
+ ) ;
144
+ expect ( spy ) . toHaveBeenCalledTimes ( 1 ) ;
145
+ await changeValue ( getField ( wrapper , 2 ) , 'value2' ) ;
146
+ // sync start
147
+ // valueUpdate -> not rerender
148
+ // depsUpdate -> not rerender
149
+ // sync end
150
+ // async start
151
+ // validateFinish -> not rerender
152
+ // async end
153
+ expect ( spy ) . toHaveBeenCalledTimes ( 1 ) ;
154
+ await changeValue ( getField ( wrapper , 1 ) , 'value1' ) ;
155
+ // sync start
156
+ // valueUpdate -> not rerender
157
+ // depsUpdate -> rerender by deps
158
+ // [ react rerender once -> 2 ]
159
+ // sync end
160
+ // async start
161
+ // validateFinish -> not rerender
162
+ // async end
163
+ expect ( spy ) . toHaveBeenCalledTimes ( 2 ) ;
164
+ } ) ;
165
+
166
+ it ( "shouldn't work when shouldUpdate is set" , async ( ) => {
167
+ const spy = jest . fn ( ) ;
168
+ const wrapper = mount (
169
+ < Form >
170
+ < Field dependencies = { [ 'field_1' ] } shouldUpdate = { ( ) => true } >
171
+ { ( ) => {
172
+ spy ( ) ;
173
+ return 'gogogo' ;
174
+ } }
175
+ </ Field >
176
+ < Field name = "field_1" >
177
+ < Input />
178
+ </ Field >
179
+ < Field name = "field_2" >
180
+ < Input />
181
+ </ Field >
182
+ </ Form > ,
183
+ ) ;
184
+ expect ( spy ) . toHaveBeenCalledTimes ( 1 ) ;
185
+ await changeValue ( getField ( wrapper , 2 ) , 'value2' ) ;
186
+ // sync start
187
+ // valueUpdate -> rerender by shouldUpdate
188
+ // depsUpdate -> rerender by deps
189
+ // [ react rerender once -> 2 ]
190
+ // sync end
191
+ // async start
192
+ // validateFinish -> rerender by shouldUpdate
193
+ // [ react rerender once -> 3 ]
194
+ // async end
195
+ expect ( spy ) . toHaveBeenCalledTimes ( 3 ) ;
196
+ await changeValue ( getField ( wrapper , 1 ) , 'value1' ) ;
197
+ // sync start
198
+ // valueUpdate -> rerender by shouldUpdate
199
+ // depsUpdate -> rerender by deps
200
+ // [ react rerender once -> 4 ]
201
+ // sync end
202
+ // async start
203
+ // validateFinish -> rerender by shouldUpdate
204
+ // [ react rerender once -> 5 ]
205
+ // async end
206
+ expect ( spy ) . toHaveBeenCalledTimes ( 5 ) ;
207
+ } ) ;
125
208
} ) ;
0 commit comments