首页 > 解决方案 > 如何解决 Jest Mock 错误“找不到模块”

问题描述

Jest 抛出一个错误,指出它找不到路径指定的模块jest.mock()


> jest


 FAIL  test/userSelect.test.ts
  ● Test suite failed to run

Cannot find module '../src/actions/selectUserById' from 'test/userSelect.test.ts'


       8 | 
       9 | jest.mock('mysql');
    > 10 | jest.mock('../src/actions/selectUserById');
      11 | 
      12 | const mockSelectUserById = selectUserById as jest.MockedFunction<
      13 |   typeof selectUserById

      at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:306:11)
00:00
      at Object.mock (test/userSelect.test.ts:10:6)

最奇怪的是:这个测试在我的本地机器上通过了,但在我们使用的 CI 服务中失败了。

标签: jestjs

解决方案


万一其他人解决了类似的问题,我终于意识到测试失败的根本原因是指​​定路径的大小写敏感性不同。

在我的情况下,真正的文件名是src/actions/selectUserByID(注意大写字母'D'),但我传递给的字符串Jest.mock()selectUserById.

在某些时候,我在本地重命名了文件,这就是为什么测试在我的机器上按预期通过的原因。但是,我了解到对文件名的区分大小写的更改不会被 git 检测为更改,这就是 CI 服务仍然具有错误文件名的原因。

我曾经git mv提交区分大小写的文件名,这解决了我的问题。


推荐阅读