@@ -257,13 +257,13 @@ describe('component: proxy', () => {
257
257
expect ( instanceProxy . isDisplayed ) . toBe ( true )
258
258
} )
259
259
260
- test ( 'allow spying on proxy methods' , ( ) => {
260
+ test ( 'allow jest spying on proxy methods with Object.defineProperty ' , ( ) => {
261
261
let instanceProxy : any
262
262
const Comp = {
263
263
render ( ) { } ,
264
264
setup ( ) {
265
265
return {
266
- toggle ( ) { }
266
+ toggle ( ) { return 'a' }
267
267
}
268
268
} ,
269
269
mounted ( ) {
@@ -274,10 +274,42 @@ describe('component: proxy', () => {
274
274
const app = createApp ( Comp )
275
275
276
276
app . mount ( nodeOps . createElement ( 'div' ) )
277
+
278
+ // access 'toggle' to ensure key is cached
279
+ let v1 = instanceProxy . toggle ( )
280
+
281
+ // reconfigure "toggle" to be getter based.
282
+ let getCalledTimes = 0
283
+ Object . defineProperty ( instanceProxy , 'toggle' , {
284
+ get ( ) {
285
+ getCalledTimes ++
286
+ return ( ) => 'b'
287
+ }
288
+ } )
277
289
278
- const spy = jest . spyOn ( instanceProxy , 'toggle' )
290
+ // getter should not be evaluated on definition
291
+ expect ( getCalledTimes ) . toEqual ( 0 )
292
+
293
+ // invoke "toggle" after "defineProperty"
294
+ let v2 = instanceProxy . toggle ( )
295
+ expect ( getCalledTimes ) . toEqual ( 1 )
279
296
297
+ // expect toggle getter not to be cached. it can't be
280
298
instanceProxy . toggle ( )
299
+ expect ( getCalledTimes ) . toEqual ( 2 )
300
+
301
+ // attaching jest spy, triggers the getter once, cache it and override the property.
302
+ // also uses Object.defineProperty
303
+ const spy = jest . spyOn ( instanceProxy , 'toggle' )
304
+ expect ( getCalledTimes ) . toEqual ( 3 )
305
+
306
+ // toggle getter is not going to be evaluated due to jest wrapper caching it result
307
+ let v3 = instanceProxy . toggle ( )
308
+ expect ( getCalledTimes ) . toEqual ( 3 )
309
+
310
+ expect ( v1 ) . toEqual ( 'a' )
311
+ expect ( v2 ) . toEqual ( 'b' )
312
+ expect ( v3 ) . toEqual ( 'b' )
281
313
282
314
expect ( spy ) . toHaveBeenCalled ( )
283
315
} )
0 commit comments