Pie*_*e_T 20 vue.js vue-test-utils vite
我尝试根据以下内容引导一个简单的应用程序Vue3,,ViteVitest
我还安装了 vue 3 兼容版本的vue test utils来测试 vue 组件。
\n我在尝试复制文档中的基本示例时遇到错误:
\nimport { mount } from "@vue/test-utils";\nimport { expect, test } from \'vitest\'\n\n\n// The component to test\nconst MessageComponent = {\n template: "<p>{{ msg }}</p>",\n props: ["msg"],\n};\n\ntest("displays message", () => {\n const wrapper = mount(MessageComponent, {\n props: {\n msg: "Hello world",\n },\n });\n\n // Assert the rendered text of the component\n expect(wrapper.text()).toContain("Hello world");\n});\n\nRun Code Online (Sandbox Code Playgroud)\n FAIL src/tests/hello-world.test.ts > displays message\nReferenceError: document is not defined\n \xe2\x9d\xaf Proxy.mount node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:7840:14\n 7838| addToDoNotStubComponents(component);\n 7839| registerStub({ source: originalComponent, stub: component });\n 7840| var el = document.createElement(\'div\');\n | ^\n 7841| if (options === null || options === void 0 ? void 0 : options.attachTo) {\n 7842| var to = void 0;\nRe-running tests... [ src/tests/hello-world.test.ts ]\n\nRun Code Online (Sandbox Code Playgroud)\n我的package.json
\n{\n "name": "vite-vue3-poc",\n "version": "0.0.0",\n "scripts": {\n "serve": "vite preview",\n "build": "vite build",\n "coverage": "vitest --coverage",\n "dev": "vite",\n "preview": "vite preview",\n "test": "vitest"\n },\n "dependencies": {\n "@mdi/font": "5.9.55",\n "prettier": "^2.5.1",\n "roboto-fontface": "*",\n "vue": "^3.2.25",\n "vuetify": "^3.0.0-alpha.0",\n "webfontloader": "^1.0.0"\n },\n "devDependencies": {\n "@vitejs/plugin-vue": "^2.0.0",\n "@vue/cli-plugin-babel": "5.0.0-beta.7",\n "@vue/cli-service": "5.0.0-beta.7",\n "@vue/test-utils": "^2.0.0-rc.18",\n "@vuetify/vite-plugin": "^1.0.0-alpha.3",\n "sass": "^1.38.0",\n "sass-loader": "^10.0.0",\n "vite": "^2.7.2",\n "vitest": "^0.1.23",\n "vue-cli-plugin-vuetify": "~2.4.5",\n "vuetify-loader": "^2.0.0-alpha.0"\n }\n}\n\nRun Code Online (Sandbox Code Playgroud)\nvite.config.js
\nimport { defineConfig } from "vite";\nimport vue from "@vitejs/plugin-vue";\nimport vuetify from "@vuetify/vite-plugin";\n\nimport path from "path";\n/// <reference types="vitest" />\n\n// Configure Vitest (https://vitest.dev/config)\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n test: {\n /* for example, use global to avoid globals imports (describe, test, expect): */\n // globals: true,\n },\n plugins: [\n vue(),\n\n // https://github.com/vuetifyjs/vuetify-loader/tree/next/packages/vite-plugin\n vuetify({\n autoImport: true,\n }),\n ],\n define: { "process.env": {} },\n resolve: {\n alias: {\n "@": path.resolve(__dirname, "src"),\n },\n },\n});\n\nRun Code Online (Sandbox Code Playgroud)\n
Pie*_*e_T 25
最后通过手动安装jsdom和声明来修复它vite.config.ts
export default defineConfig({
test: {
globals: true,
environment: "jsdom",
},
...
}
Run Code Online (Sandbox Code Playgroud)
lia*_*ulh 10
正如其他人指出的那样,您需要environment: 'jsdom'设置vitest.config.ts. 或者,您可以设置environment: 'happy-dom'.
在Vitest 文档提供的示例中,他们曾经使用happy-dom而不是jsdom. 据我所知,happy-dom这是一个更快的替代方案jsdom。我正在happy-dom我的项目中使用它,我很满意!:)
编辑:我更改了措辞以反映 Vitest 示例曾经使用happy-dom. 截至撰写本文时,它使用jsdom.
小智 5
这个配置对我有帮助
你的vite.config.ts
import { fileURLToPath, URL } from "node:url"
import { defineConfig } from "vite"
import type { UserConfig as VitestUserConfigInterface } from "vitest/config"
import vue from "@vitejs/plugin-vue"
const vitestConfig: VitestUserConfigInterface = {
test: {
globals: true,
environment: "jsdom",
},
}
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
"@": fileURLToPath(new URL("./src", import.meta.url)),
},
},
test: vitestConfig.test,
})Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11694 次 |
| 最近记录: |