From 59331e9ce64eb4531cd2735871eaff03ae69444b Mon Sep 17 00:00:00 2001 From: Lachlan Miller Date: Sun, 13 Nov 2022 19:10:52 +1000 Subject: [PATCH 1/6] chore: publish 2.2.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 946ca79f7..fc5530590 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vue/test-utils", - "version": "2.2.1", + "version": "2.2.2", "license": "MIT", "main": "dist/vue-test-utils.cjs.js", "unpkg": "dist/vue-test-utils.browser.js", From f2dd6125e6b7ca1bcee50e01c722ee8b38fcbbc6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Nov 2022 15:19:55 +0000 Subject: [PATCH 2/6] chore(deps): update vitest to v0.25.2 --- package.json | 4 ++-- pnpm-lock.yaml | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index fc5530590..2828cfbfb 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "@typescript-eslint/parser": "5.42.1", "@vitejs/plugin-vue": "3.2.0", "@vitejs/plugin-vue-jsx": "2.1.1", - "@vitest/coverage-c8": "0.25.1", + "@vitest/coverage-c8": "0.25.2", "@vue/compat": "3.2.45", "@vue/compiler-dom": "3.2.45", "@vue/compiler-sfc": "3.2.45", @@ -55,7 +55,7 @@ "unplugin-vue-components": "0.22.9", "vite": "3.2.3", "vitepress": "0.22.4", - "vitest": "0.25.1", + "vitest": "0.25.2", "vue": "3.2.45", "vue-class-component": "8.0.0-rc.1", "vue-router": "4.1.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 25234443c..4557ee62b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ specifiers: '@typescript-eslint/parser': 5.42.1 '@vitejs/plugin-vue': 3.2.0 '@vitejs/plugin-vue-jsx': 2.1.1 - '@vitest/coverage-c8': 0.25.1 + '@vitest/coverage-c8': 0.25.2 '@vue/compat': 3.2.45 '@vue/compiler-dom': 3.2.45 '@vue/compiler-sfc': 3.2.45 @@ -34,7 +34,7 @@ specifiers: unplugin-vue-components: 0.22.9 vite: 3.2.3 vitepress: 0.22.4 - vitest: 0.25.1 + vitest: 0.25.2 vue: 3.2.45 vue-class-component: 8.0.0-rc.1 vue-router: 4.1.6 @@ -53,7 +53,7 @@ devDependencies: '@typescript-eslint/parser': 5.42.1_rmayb2veg2btbq6mbmnyivgasy '@vitejs/plugin-vue': 3.2.0_vite@3.2.3+vue@3.2.45 '@vitejs/plugin-vue-jsx': 2.1.1_vite@3.2.3+vue@3.2.45 - '@vitest/coverage-c8': 0.25.1_jsdom@20.0.2 + '@vitest/coverage-c8': 0.25.2_jsdom@20.0.2 '@vue/compat': 3.2.45_vue@3.2.45 '@vue/compiler-dom': 3.2.45 '@vue/compiler-sfc': 3.2.45 @@ -75,7 +75,7 @@ devDependencies: unplugin-vue-components: 0.22.9_rollup@3.2.5+vue@3.2.45 vite: 3.2.3_@types+node@18.11.9 vitepress: 0.22.4 - vitest: 0.25.1_jsdom@20.0.2 + vitest: 0.25.2_jsdom@20.0.2 vue: 3.2.45 vue-class-component: 8.0.0-rc.1_vue@3.2.45 vue-router: 4.1.6_vue@3.2.45 @@ -962,11 +962,11 @@ packages: vue: 3.2.45 dev: true - /@vitest/coverage-c8/0.25.1_jsdom@20.0.2: - resolution: {integrity: sha512-gpl5QNaNeIN0mfRiosCqBFoZcizb5GA458TDnOQXkGDc4kklazxn70u9evGfV62wiiAUfGGebgRhxlBkAa6m6g==} + /@vitest/coverage-c8/0.25.2_jsdom@20.0.2: + resolution: {integrity: sha512-qKsiUJh3bjbB5Q229CbxEWCqiDBwvIrcZ9OOuQdMEC0pce3/LlTUK3+K3hd7WqAYEbbiqXfC5MVMKHZkV82PgA==} dependencies: c8: 7.12.0 - vitest: 0.25.1_jsdom@20.0.2 + vitest: 0.25.2_jsdom@20.0.2 transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' @@ -3714,8 +3714,8 @@ packages: - stylus dev: true - /vitest/0.25.1_jsdom@20.0.2: - resolution: {integrity: sha512-eH74h6MkuEgsqR4mAQZeMK9O0PROiKY+i+1GMz/fBi5A3L2ml5U7JQs7LfPU7+uWUziZyLHagl+rkyfR8SLhlA==} + /vitest/0.25.2_jsdom@20.0.2: + resolution: {integrity: sha512-qqkzfzglEFbQY7IGkgSJkdOhoqHjwAao/OrphnHboeYHC5JzsVFoLCaB2lnAy8krhj7sbrFTVRApzpkTOeuDWQ==} engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: From 87625ec6361b4c1d41c7047680b5a5cc03f6251c Mon Sep 17 00:00:00 2001 From: ced Date: Mon, 14 Nov 2022 12:05:29 +0100 Subject: [PATCH 3/6] fix: allow spying on non-exposed script setup functions Fixes #1859 The proxy needs to implement `defineProperty` to allow spying. --- src/vueWrapper.ts | 17 +++++++++++++++++ tests/components/ScriptSetup.vue | 2 +- tests/expose.spec.ts | 17 ++++++++++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) 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 + + diff --git a/tests/expose.spec.ts b/tests/expose.spec.ts index 7ff5528ef..16364149d 100644 --- a/tests/expose.spec.ts +++ b/tests/expose.spec.ts @@ -6,6 +6,7 @@ import DefineExpose from './components/DefineExpose.vue' import DefineExposeWithRenderFunction from './components/DefineExposeWithRenderFunction.vue' import ScriptSetupExpose from './components/ScriptSetup_Expose.vue' import ScriptSetup from './components/ScriptSetup.vue' +import ScriptSetupWithProps from './components/ScriptSetupWithProps.vue' describe('expose', () => { it('access vm on simple components', async () => { @@ -76,4 +77,18 @@ describe('expose', () => { expect(spiedIncrement).toHaveBeenCalled() expect(wrapper.html()).toContain('0') }) + + it('access props on vm with