背景:继上次jest问题之旅后,重新回顾项目的总结
上次弯路走太多了。。。。
babel6环境下配置jest:
1:jest依赖包的版本控制为23.x.x,低于23时会缺失方法,大于等于24时会报错。这里不需要再安装babel-jest了,因为在安装jest时自动安装了jest所依赖的其他包。
在babel6环境下,jest版本大于等于24时报错如下。
2:如果项目是TS项目,则还需要jest对.ts文件进行解析,因此需要安装ts-jest用于转义.ts文件。ts-jest的版本和jest一致。
3:然后上述安装的依赖在配置文件中进行配置
//package.json
{
...
"scripts":{
"test": "jest --config test/unit/jest.conf.js",//--config后面为配置文件位置
}
...
}
//jest.conf.js
const path = require('path')
module.exports = {
verbose: true,
testURL: 'http://localhost/',
rootDir: path.resolve(__dirname, '../../'),
moduleFileExtensions: [
'js',
'json',
'vue',
'ts'
],
moduleNameMapper: {
'^@\/(.*?\.?(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.(ts|js)'
],
transform: {
'^.+\\.jsx?$': '<rootDir>/node_modules/babel-jest',//转义js
'^.+\\.tsx?$': '<rootDir>/node_modules/ts-jest'//转义ts
},
testPathIgnorePatterns: [
'<rootDir>/test/e2e'
],
coverageDirectory: '<rootDir>/test/unit/coverage', // 覆盖率报告的目录
collectCoverageFrom: [ // 测试报告想要覆盖那些文件,目录,前面加!是避开这些文件
// '!src/main.js',
// '!src/router/index.js',
// '!**/node_modules/**'
]
}
问题解析:
当报错出现在依赖包中时,问题一般是依赖包的版本不匹配,当报错发生在测试文件中时,问题一般是缺少某个解析的依赖包。