Jest 测试失败,ENOENT 没有这样的文件或目录(指的是规范文件本身)

Jest tests failing with ENOENT no such file or directory (referring to the spec files themselves)

我们有一个包含多个模块的 NestJS 项目。突然,一些测试停止工作并出现错误

FAIL libs/backend/nest/pipes/src/lib/iso-date-validation.pipe.spec.ts

● Test suite failed to run

ENOENT: no such file or directory, open D:\git\my-nest-project\libs\backend\nest\pipes\src\lib\iso-date-validation.pipe.spec.ts'

它知道运行 的测试是什么,但随后它声称找不到测试文件。有时我们会遇到几个这样的错误,有时是几十个。

这些错误随机发生(并不总是在相同的测试中)在我的机器本地以及我们的 Jenkins 服务器和其他开发人员环境中。我可以在 Windows/Mac/Linux.

上复制它

没有对测试或项目配置文件的更改会触发此更改。事实上,我已经检查了在 Jenkins 中可靠构建的代码库的早期版本,现在它们具有相同的随机测试错误。

我已经在干净的 nodejs 环境中进行了测试,除了 npm 之外没有全局安装任何东西。

使用 jest --verbose 标志无法提供更多详细信息。

NestJS 项目中的 jest 配置是多层的,所以很难在这里显示全部内容,但我不明白这怎么可能是配置问题,因为测试用于 运行很好,配置文件没有改变。

我试过清除笑话缓存,但结果不一致。在某些情况下,我可以在清除缓存后得到一个干净的测试运行。

通常情况下,测试失败发生在具有一些 React .tsx 模板的模块中,但并非总是如此。有时纯 Typescript 模块会失败。

事实证明我在这个问题上搬起石头砸了自己的脚,但我发布了答案以防它对其他人有帮助。

我们的一些玩笑测试使用 mock-fs 包来模拟生产环境中存在的托管配置文件的路径。但是使用 mock-fs 的测试忽略了在测试后调用 mock.restore() 来禁用模拟文件系统。显然,模拟文件系统具有很强的侵入性。奇怪的是,引入 mock-fs 并没有立即产生破坏其他测试的意外行为。同样出乎意料的是,mock-fs 竟然能破解 jest 本身。

https://www.npmjs.com/package/mock-fs

RTFM

取消测试手表并重新启动它对我有用。用 Ctrl-D 然后 npm test