Skip to content

Commit 834965a

Browse files
authored
test coverage - SETUP,DATA,CONTEXT,PROPS
1 parent 2e2fdfb commit 834965a

File tree

1 file changed

+56
-9
lines changed

1 file changed

+56
-9
lines changed

packages/runtime-core/__tests__/componentPublicInstance.spec.ts

Lines changed: 56 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -344,42 +344,89 @@ describe('component: proxy', () => {
344344
const v2 = instanceProxy.toggle
345345
expect(v2).toEqual('b')
346346

347+
// expect null to be a settable value
347348
Object.defineProperty(instanceProxy, 'toggle', {
348349
value: null
349350
})
350351
const v3 = instanceProxy.toggle
351352
expect(v3).toBeNull()
352353
})
353354

354-
test('defineProperty on proxy property with null value descriptor', () => {
355+
test('defineProperty on public instance proxy should work with SETUP,DATA,CONTEXT,PROPS', () => {
355356
// #5417
356357
let instanceProxy: any
357358
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+
},
358368
render() {},
359369
setup() {
360370
return {
361-
toggle: 'a'
371+
fromSetup: true
362372
}
363373
},
364374
mounted() {
365375
instanceProxy = this
366376
}
367377
}
368378

369-
const app = createApp(Comp)
379+
const app = createApp(Comp, {
380+
fromProp: true
381+
})
370382

371383
app.mount(nodeOps.createElement('div'))
384+
expect(instanceProxy.greet).toEqual('Hi data.name')
372385

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+
}
377391
})
378392

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)
381427
})
382428

429+
383430
// #864
384431
test('should not warn declared but absent props', () => {
385432
const Comp = {

0 commit comments

Comments
 (0)