CI 中带有打字稿路径的玩笑“找不到模块”

2024-05-10

在 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)

我不确定如何正确解释此输出:

  1. permission-group.service.spec.ts:这是失败的测试
  2. Cannot find module '@cm/utils-server' from 'license.service.ts':
    好的,测试或者它的一些依赖项,使用license.service.ts并在license.service.ts归档'@cm/utils-server'找不到模块。
  3. 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我找到了这个解决方案:

  1. 打开tsconfig.json and jest.config.js文件(或同等文件)

  2. In tsconfig.json,找到你的绝对路径定义。我的配置如下所示:

"paths": {
    "@modules/*": ["modules/*"],
    "@config/*": ["config/*"],
    "@shared/*": ["shared/*"]
}
  1. 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(使用前将#替换为@)

CI 中带有打字稿路径的玩笑“找不到模块” 的相关文章

  • CI 中带有打字稿路径的玩笑“找不到模块”

    在 Gitlab CI 环境中 我们的 Jest 测试中有 2 个失败 并显示Cannot find module 奇怪的是 它可以在我本地的 Win10 机器上运行 即使我在类似的 docker container 中运行测试 node
  • 使用 xhr-mock 测试 AJAX 函数失败

    我正在尝试从我的中测试以下功能network js export function post data return new Promise function resolve reject need to log to the root v
  • 如何用 Jest 模拟 Sequelize?

    我正在尝试为调用 Sequelize 来创建数据库的代码编写单元测试 我一生都无法弄清楚如何模拟对 Sequelize 的调用 以便我可以断言他们已经正确创建了数据库表 我点击 Sequelize 的代码如下 import Sequeliz
  • 如何测试 jest Node JS 中 AWS 内置方法中使用的 .promise() 方法

    我想对其进行完整的单元测试 下面给出了我的函数的代码 function js async function sesSendEmail message var ses new aws SES apiVersion 2020 12 01 var
  • 用玩笑测试 Observables

    如何使用 Jest 测试 Observables 我有一个每秒触发一次的 Observable 我想在玩笑超时之前测试第一个事件是否正确触发 const myObservable timer 0 1000 Example here it s
  • 在 Vue 3 的 Jest 测试中模拟 vue-router useRouter()

    我在我的应用程序中使用 Vue 3 和 Vue Router 并且在使用 Jest 对使用的组件创建单元测试时遇到了问题useRoute 例如以下内容
  • Jest - 测试使用react-router的组件

    我正在测试一个呈现具有以下 contextTypes 的子组件的组件 Component contextTypes router PropTypes object isRequired 我对笑话完全陌生 但来自摩卡 酶我从未遇到过这个问题
  • React/Jest - 如何模拟触摸“滑动”事件

    我有一个组件 每当完成滑动交互时就会触发函数调用 这种滑动交互可以由 touchEvent 或 mouseEvent 执行 我的目标是检查每当发生滑动时该函数是否被调用 但我在玩笑测试中无法模拟 touchEvent 使用 swiper r
  • 跳过测试文件 Jest 中的一项测试

    我正在使用 Jest 框架并有一个测试套件 我想关闭 跳过其中一项测试 谷歌搜索文档没有给我答案 您知道答案或需要检查的信息来源吗 我在这里找到了答案 https devhints io jest https devhints io jes
  • 如何在 jest 中测试调用和应用函数?

    这是我的callnapply js file const callAndApply caller object method nameArg ageArg tShirtSizeArg method call object nameArg a
  • 模拟安装挂钩 Jest 测试装置

    我正在对组件进行一些单元测试 但是 在某些组件中 我有一些东西在运行mounted使我的测试失败的钩子 我设法模拟了我不需要的方法 但是 我想知道是否有一种解决方法可以模拟mounted钩住自己 components attendeesLi
  • 使用 Jest 监视链式方法调用不起作用

    我已经定制了自己的习惯TextInput组件需要一个nextField支柱 当我的 完成 按钮TextInput被按下时 nextField应该集中精力 很简单 它在生产中起作用 但是 我在测试重点代码行时遇到了问题nextField th
  • 无法读取未定义的属性“mockResolvedValue”

    我在模拟 api 调用时遇到错误 TypeError Cannot read property mockResolvedValue of undefined 并且不明白为什么 我正在利用 jest 来测试我的 api 获取调用函数 这是我要
  • 如何模拟 typeorm 连接

    在集成测试中 我使用以下代码片段来创建连接 import Connection createConnection from typeorm ts ignore import options from ormconfig js export
  • 如何使用 TypeScript API 将 tsconfig.json 编译为配置对象?

    我正在寻找一个公共官方 TypeScript API 最好是 4 x 版本 用于解析tsconfig json jsconfig json文件到完整的 TypeScript 配置对象 我所说的 完整 是指 它的所有属性都填充有值 要么显式地
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • Jest 和 Babel 转译 - SyntaxError:无法在模块外部使用 import 语句

    在某些情况下 我很难使用 JEST 来运行我得到的测试 测试套件运行失败 node modules p retry index js 1 Object
  • 语法错误:意外的静态标记

    我目前正在尝试评估与 React 配合使用的不同测试框架 结果发现 Jest 就在我的列表中 但是 我尝试使用此处概述的静态属性 https github com jeffmo es class fields and static prop
  • jest.mock() 在测试内部不起作用,仅在测试外部起作用

    我有一套简单的测试 在某些情况下我想模拟一个模块 而在某些情况下则不想 然而 jest mock 仅当将其置于测试之外时才有效 任何人都知道为什么会这样以及我做错了什么 这是我想要模拟的函数的实际导入 import hasSupport g
  • 如何按顺序运行 Jest 测试?

    我正在通过以下方式运行 Jest 测试npm test Jest 默认情况下并行运行测试 有什么办法可以让测试按顺序运行吗 我有一些调用依赖于更改当前工作目录的第三方代码的测试 CLI 选项已记录 https jestjs io docs

随机推荐