@@ -344,42 +344,89 @@ describe('component: proxy', () => {
344
344
const v2 = instanceProxy . toggle
345
345
expect ( v2 ) . toEqual ( 'b' )
346
346
347
+ // expect null to be a settable value
347
348
Object . defineProperty ( instanceProxy , 'toggle' , {
348
349
value : null
349
350
} )
350
351
const v3 = instanceProxy . toggle
351
352
expect ( v3 ) . toBeNull ( )
352
353
} )
353
354
354
- test ( 'defineProperty on proxy property with null value descriptor ' , ( ) => {
355
+ test ( 'defineProperty on public instance proxy should work with SETUP,DATA,CONTEXT,PROPS ' , ( ) => {
355
356
// #5417
356
357
let instanceProxy : any
357
358
const Comp = {
359
+ props : [ 'fromProp' ] ,
360
+ data ( ) {
361
+ return { name : 'data.name' }
362
+ } ,
363
+ computed : {
364
+ greet ( ) {
365
+ return 'Hi ' + ( this as any ) . name
366
+ }
367
+ } ,
358
368
render ( ) { } ,
359
369
setup ( ) {
360
370
return {
361
- toggle : 'a'
371
+ fromSetup : true
362
372
}
363
373
} ,
364
374
mounted ( ) {
365
375
instanceProxy = this
366
376
}
367
377
}
368
378
369
- const app = createApp ( Comp )
379
+ const app = createApp ( Comp , {
380
+ fromProp : true
381
+ } )
370
382
371
383
app . mount ( nodeOps . createElement ( 'div' ) )
384
+ expect ( instanceProxy . greet ) . toEqual ( 'Hi data.name' )
372
385
373
- const v1 = instanceProxy . toggle
374
- expect ( v1 ) . toEqual ( 'a' )
375
- Object . defineProperty ( instanceProxy , 'toggle' , {
376
- value : null
386
+ // define property on data
387
+ Object . defineProperty ( instanceProxy , 'name' , {
388
+ get ( ) {
389
+ return 'getter.name'
390
+ }
377
391
} )
378
392
379
- const v2 = instanceProxy . toggle
380
- expect ( v2 ) . toBeNull ( )
393
+ // computed is same still cached
394
+ expect ( instanceProxy . greet ) . toEqual ( 'Hi data.name' )
395
+
396
+ // trigger computed
397
+ instanceProxy . name = ''
398
+
399
+ // expect "greet" to evaluated and use name from context getter
400
+ expect ( instanceProxy . greet ) . toEqual ( 'Hi getter.name' )
401
+
402
+ // defineProperty on computed ( context )
403
+ Object . defineProperty ( instanceProxy , 'greet' , {
404
+ get ( ) {
405
+ return 'Hi greet.getter.computed'
406
+ }
407
+ } )
408
+ expect ( instanceProxy . greet ) . toEqual ( 'Hi greet.getter.computed' )
409
+
410
+ // defineProperty on setupState
411
+ expect ( instanceProxy . fromSetup ) . toBe ( true )
412
+ Object . defineProperty ( instanceProxy , 'fromSetup' , {
413
+ get ( ) {
414
+ return false
415
+ }
416
+ } )
417
+ expect ( instanceProxy . fromSetup ) . toBe ( false )
418
+
419
+ // defineProperty on Props
420
+ expect ( instanceProxy . fromProp ) . toBe ( true )
421
+ Object . defineProperty ( instanceProxy , 'fromProp' , {
422
+ get ( ) {
423
+ return false
424
+ }
425
+ } )
426
+ expect ( instanceProxy . fromProp ) . toBe ( false )
381
427
} )
382
428
429
+
383
430
// #864
384
431
test ( 'should not warn declared but absent props' , ( ) => {
385
432
const Comp = {
0 commit comments