如果“测试”脚本失败,纱线“后测”脚本将不起作用
Posted
技术标签:
【中文标题】如果“测试”脚本失败,纱线“后测”脚本将不起作用【英文标题】:Yarn "posttest" script does not work if "test" script fails 【发布时间】:2020-11-07 21:48:24 【问题描述】:好吧,我的package.json
中有这些脚本,用于在 NodeJS 中测试一些代码。
"scripts":
"pretest": "env NODE_ENV=test sequelize db:migrate",
"test": "jest",
"posttest": "env NODE_ENV=test sequelize db:migrate:undo:all"
当测试通过时,“posttest”运行,但当测试失败时,我收到一个
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
在 VS 代码中。关于这个问题的链接上没有任何有用的信息,互联网上也没有。
所以我找到了这个关于 NPM 的链接:
https://github.com/npm/npm/issues/5493
那家伙说:
在绝大多数情况下,用户会感到不愉快 如果在测试失败后运行后测(你不希望你的 正在清理测试环境或发布新版本,如果 例如,测试失败)。因此,这种行为不是 会改变。放置类似 "test":"npm run-script 测试失败 || npm run-script 强制清理”进入你的 package.json 会给你你想要的。
这并没有解决我的问题。经过更多研究,我发现了这一点:
npm posttest doesn't trigger if npm test fails
这些解决方案也对我不起作用。
那么,即使测试失败,我该如何运行“posttest”脚本呢?
【问题讨论】:
这些解决方案到底有什么不适合的?这个应该适用于你的情况并且可行,***.com/a/52073818/3731501。 您的意思是npm-run-all
应该可以工作吗?因为它没有。我尝试了所有我能想到的可能性,但都没有奏效。 --continue-on-error
是 NPM 的一个参数并且也适用于 Yarn 吗?
是的。 --continue-on-error 在这种情况下是必不可少的。它是 npm-run-all arg,而不是 NPM。 npm-run-all 也支持 Yarn。
好吧,我以为npm-run-all
是npm 的原生arg,但它是一个包。根据此页面npmjs.com/package/npm-run-all 有参数npm-run-all
和run-s
,所以我尝试了"test": "npm-run-all jest posttest --continue-on-error"
和"test": "run-s jest posttest --continue-on-error"
,在这两个中我都得到了ERROR: Task not found: "jest" error Command failed with exit code 1.
你有什么想法吗?
【参考方案1】:
嗯,通过上面的对话,我得到了这个解决方案:
这是我在package.json
中的脚本:
"scripts":
"dev": "nodemon src/server.js",
"pretest": "env NODE_ENV=test sequelize db:migrate",
"run-tests": "jest",
"run-after-tests": "env NODE_ENV=test sequelize db:migrate:undo:all",
"test": "npm-run-all run-tests run-after-tests --continue-on-error"
,
我安装了npm-run-all
包,即使测试失败,它也会运行run-after-test
脚本。现在我得到了错误
error Command failed with exit code 1.
来自test
脚本,并且
ERROR: "test" exited with 1.
error Command failed with exit code 1.
来自run-after-test
,但最终我的问题得到了解决。如果有人在脚本末尾有没有错误的更好解决方案,请与我们分享。
【讨论】:
应该是相反的,自定义run-tests
脚本用于jest
和内置test
用于npm-run-all。否则pretest
不会自动匹配清理。使用 npm-run-all 执行此操作的目的是在失败时能够得到错误,否则可以使用 shell ;
。但它不应该一直以错误退出,这意味着 Jest 或清理失败。你可以单独调试它们,但它似乎是在开玩笑。
我将需要更多时间来理解正确的方法,但如果你能修复代码,请随意。
应该是"run-tests": "jest", "run-after-test": "env NODE_ENV=test sequelize db:migrate:undo:all", "test": "npm-run-all run-tests run-after-test --continue-on-error"
。
纱线有替代品吗?谢谢!
稍后编辑:没关系。似乎 yarn-run-all
存在,但在 package.json 脚本中,您使用 npm-run-all
运行它。真的很奇怪的互动,但它的工作。以上是关于如果“测试”脚本失败,纱线“后测”脚本将不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如果文本是在 textarea 中生成的,则 Javascript 字数统计功能不起作用
jQuery插件不起作用……“类型错误:'undefined'不是一个函数”