如何在Cypress测试执行后静默终止WireMock并让命令返回码为0?
问题:如何让concurrently一站式命令忽略特定子命令的退出码?
我通过concurrently工具实现了一个一站式npm脚本,同时完成以下操作:
- 启动React应用
- 以回放模式启动WireMock服务器
- 静默执行Cypress测试
对应的package.json脚本配置如下:
"cypress:runner:one-shot": "concurrently npm:wiremock:playback npm:start:mock npm:cypress:execution:recorded",
为了在Cypress测试完成后自动关闭React应用和WireMock服务器,我给concurrently命令添加了以下参数:
--kill-others --success !command-0,!command-1
目前遇到的问题是:测试执行完成后,WireMock被终止时返回了退出码1,导致整个一站式命令最终也返回退出码1,但我需要这个命令最终返回退出码0。请问有没有办法忽略其中某些命令的退出码?
补充说明:wiremock:playback脚本示例如下:
"wiremock:playback": "npx wiremock --proxy-all '...' --verbose --port 3001 --enable-stub-cors --root-dir wiremock",
解决方案
方法一:给目标命令添加退出码兜底逻辑
直接修改wiremock:playback脚本,让它无论执行结果如何都返回退出码0:
"wiremock:playback": "npx wiremock --proxy-all '...' --verbose --port 3001 --enable-stub-cors --root-dir wiremock || exit 0",
这样即使WireMock被强制终止返回非0退出码,这个子命令最终会返回0,不会影响整个concurrently命令的最终退出码。
方法二:使用concurrently的命令级忽略退出码选项
concurrently支持给单个命令单独配置忽略退出码,修改你的一站式脚本:
"cypress:runner:one-shot": "concurrently --kill-others --success !command-0,!command-1 \"--ignore-exit-code npm:wiremock:playback\" npm:start:mock npm:cypress:execution:recorded",
通过给npm:wiremock:playback命令前置--ignore-exit-code,concurrently会忽略该命令的退出码,只要作为成功判断标准的Cypress测试返回0,整个命令就会返回0。
方法三:结合--success参数优化逻辑
你的--success !command-0,!command-1已经指定了只有Cypress测试(对应command-2)成功就算整个命令成功,但需要配合前面两种方法之一,让WireMock的退出码不被纳入整体失败判断,才能确保最终返回0。
内容的提问来源于stack exchange,提问作者Gonzalo Matheu
相关产品推荐
相关产品推荐

