Vue-test-utils |笑话:如何处理依赖关系?

时间:2018-10-12 10:51:48

标签: unit-testing vue.js vuejs2 jestjs vue-test-utils

情况:

我正在使用带有Jest配置的vue-test-utils在我的Vue应用程序中实现单元测试。

当我测试简单的组件时,一切都很好。但是当我测试导入其他依赖项的组件时,测试失败。

配置:

Vue版本:2.5.17
@ vue / test-utils:1.0.0-beta.20
cli-plugin-unit-jest:3.0.3
babel-jest:23.0.1

错误消息:

确切的错误消息取决于我要导入的依赖项。

例如对于epic-spinners,错误是:

SyntaxError: Unexpected token import

enter image description here

使用vue-radial-progress时,错误是:

SyntaxError: Unexpected token <

enter image description here

如何复制:

  • 重新安装Vue(以Jest作为单元测试套件)
  • 运行示例测试,它应该通过
  • 安装依赖项(例如:npm install --save epic-spinners
  • 将依赖项导入HelloWorld组件中
  • 再次运行测试(不做任何更改)

如果执行这些步骤,测试将失败,并显示上述错误消息。

问题:

如何处理vue-test-utils / Jest中的依赖项导入?

3 个答案:

答案 0 :(得分:1)

问题在于某些模块可能无法正确编译。

解决方案是使用Jest设置的transformIgnorePatterns属性。也就是说,来自文档:

  

与所有源匹配的正则表达式模式字符串数组   转换前的文件路径。如果测试路径与任何   模式,它将不会被转换。

就我而言,这就是我解决问题的方式:

transformIgnorePatterns: [
  "node_modules/(?!epic-spinners|vue-radial-progress)"
],

编辑:

这是我的jest.config.js

module.exports = {
  moduleFileExtensions: [
    'js',
    'jsx',
    'json',
    'vue'
  ],
  transform: {
    '^.+\\.vue$': 'vue-jest',
    '.+\\.(css|styl|less|sass|scss|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub',
    '^.+\\.jsx?$': 'babel-jest',
  },
  transformIgnorePatterns: [
    "node_modules/(?!epic-spinners|vue-radial-progress)"
    // "node_modules/(?!epic-spinners)",
  ],
  moduleNameMapper: {
    '^@/(.*)$': '<rootDir>/src/$1'
  },
  snapshotSerializers: [
    'jest-serializer-vue'
  ],
  testMatch: [
    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
  ],
  testURL: 'http://localhost/'
}

答案 1 :(得分:0)

除了@FrancescoMussi的解决方案之外,如果仍然无法使用它,请确保您的Babel配置位于Jest docs

的正确位置

我已将Babel配置移至package.json,由于Vue CLI安装了Babel 7,Babel无法检测到。将Babel配置移回babel.config.js为我解决了这个问题。

答案 2 :(得分:0)

除了@FrancescoMussi 的回答之外,在编辑我的 jest.config.js 之后,如果您收到错误:jest-transform-stub not found,只需安装它。就我而言,我没有安装 jest-transform-stub 和 jest-serializer-vue。安装这些后,我的测试开始工作。

npm install --save-dev jest-serializer-vue

https://www.npmjs.com/package/jest-serializer-vue

npm install --save-dev jest-transform-stub

https://www.npmjs.com/package/jest-transform-stub