美文网首页
vue-cli3 + Jest + Vue Test Utils

vue-cli3 + Jest + Vue Test Utils

作者: Axiba | 来源:发表于2020-01-14 17:46 被阅读0次

1、假设你已经有一个vue-cli3的项目,先安装Jest 所需要的依赖:

cnpm i @vue/test-utils babel-jest jest jest-serializer-vue jest-transform-stub vue-jest -D

2、修改 babel.config.js 文件,主要解决使用Babel的问题 ,参考:https://jestjs.io/docs/en/getting-started#using-babel

module.exports = {
  presets: [
    ['@vue/app', {
      useBuiltIns: 'entry',
    }]
  ],
  // 新增的配置,
  "env": {
    "test": {
      "presets": ["env"]
    }
  }
}

3、增加 jest.conf.js 配置文件

const path = require('path');

module.exports = {
  verbose: true,
  testURL: 'http://localhost/',
  rootDir: path.resolve(__dirname, '../../'),
  moduleFileExtensions: [
    'js',
    'json',
    'vue'
  ],
  moduleNameMapper: {
    // eslint-disable-next-line no-useless-escape
    '^@\/(.*?\.?(js|vue)?|)$': '<rootDir>/src/$1',   // @路径转换,例如:@/components/Main.vue -> rootDir/src/components/Main.vue
    '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '<rootDir>/test/unit/__mocks__/fileMock.js', // 模拟加载静态文件
    '\\.(css|less|scss|sass)$': '<rootDir>/test/unit/__mocks__/styleMock.js' // 模拟加载样式文件
  },
  testMatch: [ //匹配测试用例的文件
    '<rootDir>/test/unit/specs/*.spec.js'
  ],
  transform: {
    '^.+\\.js$': '<rootDir>/node_modules/babel-jest',
    '.*\\.(vue)$': '<rootDir>/node_modules/vue-jest'
  },
  testPathIgnorePatterns: [
    '<rootDir>/test/e2e'
  ],
  // setupFiles: ['<rootDir>/test/unit/setup'],
  snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],
  coverageDirectory: '<rootDir>/test/unit/coverage', // 覆盖率报告的目录
  collectCoverageFrom: [ // 测试报告想要覆盖那些文件,目录,前面加!是避开这些文件
    // 'src/components/**/*.(js|vue)',
    'src/components/tabs-cards/*.(vue)',
    '!src/main.js',
    '!src/router/index.js',
    '!**/node_modules/**'
  ]
}

4、在package.json 的 scripts 里添加测试命令

"unit": "jest --config test/unit/jest.conf.js --coverage"

另外,如果遇到如下错误,主要是因为 babel-jest不支持babel7,解决方案是安装 babel-core@^7.0.0-bridge.0插件

Failed to collect coverage from *****
ERROR: Plugin 0 specified in "******" provided an invalid property of "default" (While processing preset: "****8/node_modules/@vue/babel-preset-app/index.js")
STACK: Error: Plugin 0 specified in "*****/node_modules/@vue/babel-preset-app/index.js" provided an invalid property of "default" (While processing preset: "*****/node_modules/@vue/babel-preset-app/index.js")

cnpm install --save-dev babel-core@^7.0.0-bridge.0

参考资料:
https://segmentfault.com/a/1190000008628067

https://github.com/ElemeFE/element/blob/dev/test/unit/specs/button.spec.js

https://deltice.github.io/jest/docs/zh-Hans/getting-started.html#content

https://github.com/YalongYan/vue-test-utils-jest

相关文章

网友评论

      本文标题:vue-cli3 + Jest + Vue Test Utils

      本文链接:https://www.haomeiwen.com/subject/gypaactx.html