diff --git a/src/vueWrapper.ts b/src/vueWrapper.ts index 3ecd81263..5034a4405 100644 --- a/src/vueWrapper.ts +++ b/src/vueWrapper.ts @@ -45,12 +45,29 @@ function createVMProxy( return Reflect.set(vm, key, value, receiver) } }, + has(vm, property) { + return Reflect.has(setupState, property) || Reflect.has(vm, property) + }, + defineProperty(vm, key, attributes) { + if (key in setupState) { + return Reflect.defineProperty(setupState, key, attributes) + } else { + return Reflect.defineProperty(vm, key, attributes) + } + }, getOwnPropertyDescriptor(vm, property) { if (property in setupState) { return Reflect.getOwnPropertyDescriptor(setupState, property) } else { return Reflect.getOwnPropertyDescriptor(vm, property) } + }, + deleteProperty(vm, property) { + if (property in setupState) { + return Reflect.deleteProperty(setupState, property) + } else { + return Reflect.deleteProperty(vm, property) + } } }) } diff --git a/tests/components/ScriptSetup.vue b/tests/components/ScriptSetup.vue index d79d16ab5..48402e806 100644 --- a/tests/components/ScriptSetup.vue +++ b/tests/components/ScriptSetup.vue @@ -12,6 +12,6 @@ const inc = () => { diff --git a/tests/expose.spec.ts b/tests/expose.spec.ts index 2b09247bf..7ff5528ef 100644 --- a/tests/expose.spec.ts +++ b/tests/expose.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest' +import { describe, expect, it, vi } from 'vitest' import { nextTick } from 'vue' import { mount } from '../src' import Hello from './components/Hello.vue' @@ -61,4 +61,19 @@ describe('expose', () => { await nextTick() expect(wrapper.html()).toContain('2') }) + + it('spies on vm with