You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:01:27