110

更新:我的用例主要是在 CI 上运行测试,但覆盖默认的 CRA Jest 参数是我通常想知道的。


我正在使用Create React App附带的Jest配置运行测试。它总是启动到交互模式:

 › Press a to run all tests.
 › Press o to only run tests related to changed files.
 › Press p to filter by a filename regex pattern.
 › Press q to quit watch mode.
 › Press Enter to trigger a test run.

但我不希望它等待我的输入。我希望它运行一次然后终止。我尝试使用--bailor--no-watchman开关,但它仍然以交互模式启动。

如果我全局安装jest并在我的项目的根目录中运行它,它会执行一次并完成(就像我想要的那样)。但是当我运行npm testwhich runsreact-scripts test时,即使我没有通过,它也会进入手表模式--watch

更新:我还在CRA上提交了一个问题。

4

3 回答 3

167

您应该使用Jests--watchAll=false标志

例如:

npm test -- --watchAll=false

注意:这适用于react-scripts > 3.00

对于旧版本:

  • 反应脚本>= 2.1.4 < 3.00

对于非 ci,例如在本地运行测试,您可以传递一个--no-watch标志:

npm test --no-watch

  • 反应脚本<= 2.1.3

CRA 查找CI环境变量,如果它存在,它不会在监视模式下运行。

CI=true npm test应该做你正在寻找的

请参阅用户指南 -> 运行测试 -> 在您自己的环境中

于 2016-09-27T13:55:49.370 回答
27

在您的package.json脚本中:

"test": "react-scripts test --watchAll=false"

或者npm test -- --watchAll=false

或者yarn test --watchAll=false

--no-watch注意:该标志曾经被调用react-scripts < 3.0https ://github.com/facebook/create-react-app/blob/3.x/CHANGELOG.md#remove---no-watch-flag

于 2019-12-04T16:39:59.903 回答
2

非交互式解决方案:

npm test a --watchAll=false

或者

yarn test a --watchAll=false
于 2020-04-25T20:36:54.717 回答