@@ -168,50 +168,84 @@ describe('Expect the <Parallax> component', () => {
168
168
expect ( controller . removeElement ) . toBeCalledWith ( element ) ;
169
169
} ) ;
170
170
171
- it ( 'to update an element in the controller when receiving new props and disable an element if the disable prop is true ' , ( ) => {
171
+ it ( 'to update an element in the controller when receiving relevant new props' , ( ) => {
172
172
const node = document . createElement ( 'div' ) ;
173
173
174
174
const controller = ParallaxController . init ( ) ;
175
175
controller . updateElement = jest . fn ( ) ;
176
- controller . resetElementStyles = jest . fn ( ) ;
177
176
178
177
let instance ;
179
-
180
178
class StateChanger extends React . Component {
181
179
state = { disabled : false } ;
182
-
183
- componentDidMount ( ) {
184
- this . setState ( { disabled : true } ) ;
185
- }
186
-
187
180
render ( ) {
188
181
return (
189
- < Parallax
190
- disabled = { this . state . disabled }
191
- ref = { ref => ( instance = ref ) }
192
- />
182
+ < Parallax { ...this . state } ref = { ref => ( instance = ref ) } />
193
183
) ;
194
184
}
195
185
}
196
186
187
+ let stateInstance ;
197
188
ReactDOM . render (
198
189
< MockProvider controllerMock = { controller } >
199
- < StateChanger />
190
+ < StateChanger ref = { ref => ( stateInstance = ref ) } />
200
191
</ MockProvider > ,
201
192
node
202
193
) ;
203
194
195
+ const testProps = {
196
+ disabled : true ,
197
+ offsetXMax : 100 ,
198
+ offsetXMin : - 100 ,
199
+ offsetYMax : 100 ,
200
+ offsetYMin : - 100 ,
201
+ slowerScrollRate : false ,
202
+ } ;
203
+
204
+ // trigger an update
205
+ stateInstance . setState ( testProps ) ;
206
+
204
207
expect ( controller . updateElement ) . toBeCalledWith ( instance . element , {
205
208
props : {
206
- disabled : instance . props . disabled ,
207
- offsetXMax : instance . props . offsetXMax ,
208
- offsetXMin : instance . props . offsetXMin ,
209
- offsetYMax : instance . props . offsetYMax ,
210
- offsetYMin : instance . props . offsetYMin ,
211
- slowerScrollRate : instance . props . slowerScrollRate ,
209
+ ...testProps ,
212
210
} ,
213
211
} ) ;
214
212
213
+ // should not be called again
214
+ stateInstance . setState ( {
215
+ ...testProps ,
216
+ foo : false ,
217
+ bar : true ,
218
+ } ) ;
219
+
220
+ expect ( controller . updateElement ) . toHaveBeenCalledTimes ( 1 ) ;
221
+ } ) ;
222
+
223
+ it ( 'to reset styles on an elment if the disabled prop is true' , ( ) => {
224
+ const node = document . createElement ( 'div' ) ;
225
+
226
+ const controller = ParallaxController . init ( ) ;
227
+ controller . resetElementStyles = jest . fn ( ) ;
228
+
229
+ let instance ;
230
+ class StateChanger extends React . Component {
231
+ state = { disabled : false } ;
232
+ render ( ) {
233
+ return (
234
+ < Parallax { ...this . state } ref = { ref => ( instance = ref ) } />
235
+ ) ;
236
+ }
237
+ }
238
+
239
+ let stateInstance ;
240
+ ReactDOM . render (
241
+ < MockProvider controllerMock = { controller } >
242
+ < StateChanger ref = { ref => ( stateInstance = ref ) } />
243
+ </ MockProvider > ,
244
+ node
245
+ ) ;
246
+
247
+ stateInstance . setState ( { disabled : true } ) ;
248
+
215
249
expect ( controller . resetElementStyles ) . toBeCalledWith ( instance . element ) ;
216
250
} ) ;
217
251
} ) ;
0 commit comments