jestjs - 如何解决 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 服务中失败了。
解决方案
万一其他人解决了类似的问题,我终于意识到测试失败的根本原因是指定路径的大小写敏感性不同。
在我的情况下,真正的文件名是src/actions/selectUserByID
(注意大写字母'D'
),但我传递给的字符串Jest.mock()
是selectUserById
.
在某些时候,我在本地重命名了文件,这就是为什么测试在我的机器上按预期通过的原因。但是,我了解到对文件名的区分大小写的更改不会被 git 检测为更改,这就是 CI 服务仍然具有错误文件名的原因。
我曾经git mv
提交区分大小写的文件名,这解决了我的问题。
推荐阅读
- database - 如何恢复卸载的wordpress
- python - 更改某些变量的值后更改条件
- apache-spark - Spark groupBy vs repartition plus mapPartitions
- java - 在 Grizzly 上运行的 Java Web 应用程序出现零星的 502 错误
- sql - 你喜欢哪种数据库设计;一种具有实际的物理关系还是一种模仿它?
- logstash - 如何在logstash的grok模式中使用IF ELSE条件
- sql - 列出总和相同的数字组合
- materialize - 如何在具体化 v1.0.0-rc.2 版本中实现最小和最大日期验证
- javascript - Javascript 模块 - 从模块内的 Ajax 请求返回 JSON 对象
- css - Bootstrap 4.1 导航栏下拉对齐