我正在为Node.js项目设置测试。测试包括与应该从本地http-server
提供的静态内容(图像)进行交互。
测试完成时-成功还是失败-我想结束服务器进程并以正确的代码退出。我在npm脚本中想到的是以下内容:
"server": "http-server testdata -p 9876 -s",
"testcmd": "...",
"test": "npm run server & npm run testcmd && kill $(lsof -t -i:9876) || (kill $(lsof -t -i:9876) && exit 1)",
哪个“有效”,但是有两个问题:
||
和&&
情况testcmd
的任何非零退出代码将始终转换为1
退出代码-理想情况下,我想传播确切的退出代码我尝试阅读有关内容,发现有人在谈论陷阱,但无法使其正常工作。
什么是简化此控制流程方案的好方法?
答案 0 :(得分:1)
您的两个问题联系在一起:如果将命令分解得更好,则可以轻松实现所追求的目标。
由于您不想设置陷阱(对于此任务,我也不会怪您),因此您需要做的是捕获 testcmd
的退出状态这样您以后就可以重申。完成此操作后,您可以无条件运行清理,因此无需重复。例如:
npm run server & (npm run testcmd; status=$?; kill $(lsof -t -i:9876); exit $status)
也许缺少的特殊参数$?
扩展为最近执行的[partial]管道的退出状态。