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
我们有一个包含多个模块的 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