在 Gitlab-CI 环境中,我们的 Jest 测试中有 2 个失败,并显示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'
找不到模块。
- What is the meaning of error-indicator (
>
at parseLicenseInfo
)?
- 这是为了进口
@cm/license-shared
- 不是为了@cm/utils-server
如2中的错误消息所示
-
@cm/utils-server
也被导入,但是第 14 行下面有 2 行: 那么这可能只是一个玩笑中的错误?
我刚刚遇到这个问题并寻找一些解决方案。成立this https://www.xspdf.com/resolution/50171412.html站点提供了有关可以做什么的线索:配置 Jest 的 moduleNameMapper 属性。
所以,阅读文档 https://jestjs.io/docs/en/configuration#modulenamemapper-objectstring-string--arraystring我找到了这个解决方案:
-
打开tsconfig.json
and jest.config.js
文件(或同等文件)
-
In tsconfig.json
,找到你的绝对路径定义。我的配置如下所示:
"paths": {
"@modules/*": ["modules/*"],
"@config/*": ["config/*"],
"@shared/*": ["shared/*"]
}
- In the
jest.config.json
,找到并取消注释moduleNameMapper
属性并开始将 TS 绝对路径转换为 Jest 映射器语法。听起来很复杂,但事实并非如此:
moduleNameMapper: {
"@modules/(.*)": "<rootDir>/src/modules/$1",
"@config/(.*)": "<rootDir>/src/config/$1",
"@shared/(.*)": "<rootDir>/src/shared/$1",
}
- The
<rootDir>
如果自动定义,并指向package.json
目录
-
"@modules/(.*)"
是“以 '@module/' 开头的任何字符串,后面跟着任何内容的正则表达式
-
"<rootDir>/src/modules/$1"
是对应的目录。$1
是指向括号 ((.*)
)。其他表达式将由$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
希望这对某人有帮助,
谢谢!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)