TmT*_*ron 5 tsconfig jestjs ts-jest nrwl-nx
在 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)
Run Code Online (Sandbox Code Playgroud)
我不确定如何正确解释此输出:
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-server2 中的错误消息所指示的@cm/utils-server 也被导入,但在第 14 行下面有 2 行:所以这可能只是一个玩笑的错误吗?小智 14
我刚刚遇到这个问题并寻找一些解决方案。找到这个网站,它提供了有关可以做什么的线索:配置 Jest\ 的 moduleNameMapper 属性。
\n因此,阅读文档我找到了这个解决方案:
\n打开tsconfig.json和jest.config.js文件(或同等文件)
在 中tsconfig.json,找到您的绝对路径定义。我的配置如下:
"paths": {\n "@modules/*": ["modules/*"],\n "@config/*": ["config/*"],\n "@shared/*": ["shared/*"]\n}\nRun Code Online (Sandbox Code Playgroud)\njest.config.json,找到并取消注释该moduleNameMapper属性,然后开始将 TS 绝对路径转换为 Jest 映射器语法。听起来很复杂,但事实并非如此:moduleNameMapper: {\n "@modules/(.*)": "<rootDir>/src/modules/$1",\n "@config/(.*)": "<rootDir>/src/config/$1",\n "@shared/(.*)": "<rootDir>/src/shared/$1",\n}\nRun Code Online (Sandbox Code Playgroud)\n<rootDir>自动定义,并指向package.json目录"@modules/(.*)"是“以 \'@module/\' 开头的任何字符串,后跟其后的任何内容的正则表达式"<rootDir>/src/modules/$1"是对应的目录。$1是指向括号 () 之间的 Regex 表达式的指针(.*)。$2其他表达式将由,指向,$3依此类推完成此操作后,我能够毫无问题地执行测试。
\n在执行上述步骤之前控制台输出:
\n$ jest\n FAIL src/modules/appointments/services/CreateAppointmentService.spec.ts\n \xe2\x97\x8f Test suite failed to run\n\n Cannot find module \'...\'\nRun Code Online (Sandbox Code Playgroud)\n之后控制台输出:
\n$ jest\n PASS src/modules/appointments/services/CreateAppointmentService.spec.ts\nRun Code Online (Sandbox Code Playgroud)\n希望这对某人有帮助,\n谢谢!
\n现在我们使用一个解决方法:我们在 mono-repo 的多个 tsconfig.json 文件中定义了路径。我们将所有路径移至 root-tsconfig,现在测试再次正常工作。
但我们并不真正理解为什么会这样。
缺点是现在很容易意外引用库中不应使用的路径(因为 IDE 现在始终使用所有路径进行代码辅助)
| 归档时间: |
|
| 查看次数: |
3036 次 |
| 最近记录: |