@vue/cli-plugin-unit-jest
vue-cli 的 unit-jest 插件
注入的命令
vue-cli-service test:unit
使用 Jest 运行单元测试。默认的
testMatch
是<rootDir>/(tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx))
,它匹配tests/unit
中所有以.spec.(js|jsx|ts|tsx)
结尾的文件;__tests__
目录中的所有 js(x)/ts(x) 文件。
用法:
vue-cli-service test:unit [options] <regexForTestFiles>
所有 Jest 命令行选项 也受支持。
调试测试
请注意,直接运行 jest
会失败,因为 Babel 预设需要提示才能使您的代码在 Node.js 中正常工作,因此您必须使用 vue-cli-service test:unit
运行测试。
如果您想通过 Node 检查器调试测试,可以运行以下命令
# macOS or linux
node --inspect-brk ./node_modules/.bin/vue-cli-service test:unit --runInBand
# Windows
node --inspect-brk ./node_modules/@vue/cli-service/bin/vue-cli-service.js test:unit --runInBand
配置
Jest 可以通过项目根目录中的 jest.config.js
或 package.json
中的 jest
字段进行配置。
在已创建的项目中安装
vue add unit-jest
从 /node_modules
转换依赖项
默认情况下,jest 不会转换 /node_modules
中的任何内容。
由于 jest 在 node 中运行,我们也不必转译任何使用现代 ECMAScript 特性的代码,因为 Node >=8 已经支持这些特性,因此这是一个合理的默认设置。cli-plugin-jest 也不尊重 vue.config.js
中的 transpileDependencies
选项,原因相同。
但是,我们至少有三种情况下需要在 jest 中转译来自 /node_modules
的代码
- 使用 ES6
import
/export
语句,这些语句必须编译为 commonjsmodule.exports
- 单文件组件 (
.vue
文件),这些文件必须通过vue-jest
运行 - Typescript 代码
为此,我们需要在 jest 的 transformIgnorePatterns
选项中添加一个例外。这是它的默认值
transformIgnorePatterns: ['/node_modules/']
我们必须使用 RegExp 负向先行来为该模式添加例外
transformIgnorePatterns: ['/node_modules/(?!name-of-lib-o-transform)']
要排除多个库
transformIgnorePatterns: ['/node_modules/(?!lib-to-transform|other-lib)']