⚠️ Vue CLI 处于维护模式!

对于新项目,现在建议使用 create-vue 来搭建基于 Vite 的项目。还可以参考 Vue 3 工具指南 获取最新建议。

@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.jspackage.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 的代码

  1. 使用 ES6 import/export 语句,这些语句必须编译为 commonjs module.exports
  2. 单文件组件 (.vue 文件),这些文件必须通过 vue-jest 运行
  3. Typescript 代码

为此,我们需要在 jest 的 transformIgnorePatterns 选项中添加一个例外。这是它的默认值

transformIgnorePatterns: ['/node_modules/']

我们必须使用 RegExp 负向先行来为该模式添加例外

transformIgnorePatterns: ['/node_modules/(?!name-of-lib-o-transform)']

要排除多个库

transformIgnorePatterns: ['/node_modules/(?!lib-to-transform|other-lib)']