目前 Jest 未能通过测试,因为它无法找到组件内调用的模块:
FAIL tests/Unit/VHeaderBar.spec.ts
● Test suite failed to run
Cannot find module '@@/public/assets/images/placeholder.png' from 'VHeaderBar.vue'
at Resolver.resolveModule (node_modules/jest-runtime/node_modules/jest-resolve/build/index.js:221:17)
at src/components/VHeaderBar.vue:687:18
at Object.<anonymous> (src/components/VHeaderBar.vue:749:3)
案子
在NuxtJs中,这些@@
标志是指根目录,因为最终我们希望将图像存储在位于项目根目录中的 public 文件夹或 storage 文件夹中。
运行测试时,jest会检查src
文件夹,然后尝试挂载从根目录存储的图像,但找不到它们。
我尝试了许多不同的方法来解决这个问题,但似乎无法找到解决方案。这是我已经尝试过的候选清单:
- 更改
regex
以检查图像文件并使用moduleNameMapper
Jest 配置文件中的选项将其引导到正确的文件夹。 - 我在 Stack 上读到了一些关于使用通过 javascript 导出图像文件的“模拟”文件夹,但这没有用。
- 使用
modulePaths
Jest 配置文件中的选项。 tsconfig.js
在资产文件夹中创建别名并在moduleNameMapper
- 在 VueJS 组件和测试文件中尝试了一种不同的方法来加载资产,这破坏了编译过程(所以我恢复了它)。
当前的 Jest 配置文件
module.exports = {
moduleFileExtensions: [
"ts",
"tsx",
"vue",
"js",
"json"
],
watchman: false,
moduleNameMapper: {
"/\.(gif|jpg|jpeg|tiff|png)$/i": "<rootDir>/public/assets/images/$1",
"^@/(.*)$": "<rootDir>/src/$1",
"^~/(.*)$": "<rootDir>/src/$1",
"^~~/(.*)$": "<rootDir>/src/$1"
},
transform: {
// process js with `babel-jest`
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
// process `*.vue` files with `vue-jest`
".*\\.(vue)$": "<rootDir>/node_modules/vue-jest",
// process `*.ts` files with `ts-jest`
"^.+\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest",
},
snapshotSerializers: [
"<rootDir>/node_modules/jest-serializer-vue"
],
collectCoverage: true,
collectCoverageFrom: [
"<rootDir>/src/components/**/*.vue",
"<rootDir>/src/pages/**/*.vue",
"<rootDir>/src/layouts/**/*.vue"
],
testMatch: [
'**/tests/Unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
],
}
当前文件夹结构(仅用于测试的文件夹)
project folder
- public
-- assets
--- **images**
- src
-- components
--- **mounted component** (works)
- tests
-- Unit
--- mountedComponent.spec.ts
有什么建议么?
我修jest.config
吗?
语法有问题吗?
我必须修复tsconfig
吗?