在 Gitlab-CI 环境 2 中,我们的 Jest 测试失败并显示 Cannot find module
.
奇怪的是,它可以在我本地的 Win10 机器上运行——即使我在类似的 docker-container ( node 12.12.0
) 中运行测试也是如此。
这是控制台输出:
FAIL apps/server/src/domain/dashboard/permission-group.service.spec.ts
Test suite failed to run
Cannot find module '@cm/utils-server' from 'license.service.ts'
9 | isLicenseFileContent,
10 | LicenseStatus,
> 11 | parseLicenseInfo
| ^
12 | } from '@cm/license-shared';
13 | import { ExitCode } from '../../util/exit-codes';
14 | import { readFile } from '@cm/utils-server';
at Resolver.resolveModule (../../node_modules/jest-resolve/build/index.js:259:17)
at Object.<anonymous> (src/domain/license/license.service.ts:11:24)
我不确定如何正确解释此输出:
permission-group.service.spec.ts
:这是失败的测试Cannot find module '@cm/utils-server' from 'license.service.ts'
:好的,测试或者它的一些依赖,使用
license.service.ts
并在 license.service.ts
归档 '@cm/utils-server'
找不到模块。 >
at parseLicenseInfo
) 的含义是什么?@cm/license-shared
- 不适用于 @cm/utils-server
如 2 @cm/utils-server
也被导入,但在第 14 行下面有 2 行:所以这可能只是一个 Jest 的错误吗? 最佳答案
我刚刚遇到了这个问题并寻找了一些解决方案。找到 this提供了可以做什么的线索的站点:配置 Jest 的 moduleNameMapper 属性。
所以,阅读 documentation我找到了这个解决方案:
tsconfig.json
和 jest.config.js
文件(或等效文件)tsconfig.json
,找到您的绝对路径定义。我的配置是这样的:"paths": {
"@modules/*": ["modules/*"],
"@config/*": ["config/*"],
"@shared/*": ["shared/*"]
}
jest.config.json
,找到并取消注释 moduleNameMapper
属性并开始将您的 TS 绝对路径转换为 Jest 映射器语法。听起来很复杂,但事实并非如此:moduleNameMapper: {
"@modules/(.*)": "<rootDir>/src/modules/$1",
"@config/(.*)": "<rootDir>/src/config/$1",
"@shared/(.*)": "<rootDir>/src/shared/$1",
}
<rootDir>
如果自动定义,并指向 package.json
目录"@modules/(.*)"
是一个正则表达式,表示“任何以‘@module/’开头的字符串,后面跟着它 "<rootDir>/src/modules/$1"
是对应的目录。 $1
是指向括号之间的 Regex 表达式的指针 ( (.*)
)。其他表达式将由 $2
指向, $3
等等 这样做之后,我能够毫无问题地执行我的测试。
执行上述步骤之前的控制台输出:
$ jest
FAIL src/modules/appointments/services/CreateAppointmentService.spec.ts
● Test suite failed to run
Cannot find module '...'
控制台输出:$ jest
PASS src/modules/appointments/services/CreateAppointmentService.spec.ts
希望这有助于某人,谢谢!
关于jestjs - Jest "Cannot find module"在 CI 中带有 typescript 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59116570/