Cucumber-js: 用 process.exitCode 替换 process.exit()

创建于 2017-08-03  ·  6评论  ·  资料来源: cucumber/cucumber-js

是否可以按照下面链接的 Node.js 建议用 process.exitCode 替换 process.exit() 调用(我只能找到run.js 中的一对)。 在我的情况下,Cucumber.js 在异步文件记录器有机会刷新之前终止 Node,以及事件循环中其他可能的挂起操作。

https://nodejs.org/api/process.html#process_process_exit_code

需要注意的是,调用 process.exit() 会强制进程尽快退出,即使还有未完成的异步操作挂起,包括对 process.stdout 和 process.stderr 的 I/O 操作. 在大多数情况下,实际上没有必要显式调用 process.exit()。 如果事件循环中没有其他待处理的工作,Node.js 进程将自行退出。 可以设置 process.exitCode 属性来告诉进程在进程正常退出时使用哪个退出代码。

help wanted good first issue

最有用的评论

我很犹豫要不要这样做,因为我认为其他用户可能会遇到问题(我主要考虑的是那些使用它进行浏览器测试的人,我记得它挂起的地方)。 此外,该节点推荐仅存在于版本 6 和 8。它不存在于版本 4 中,版本 4 将在 2018 年 4 月之前得到支持(当节点停止支持时)。 不过,我最好为此添加一个 CLI 选项。 像--drain-event-loop这样的东西会使用 process.exitCode 而不是 process.exit。

所有6条评论

您可以等待记录器在钩子/步骤定义中完成吗? 我记得很小心,在很多情况下,cucumber-js 不会退出,因为它正在等待一切退出事件循环

我正在使用的当前解决方法是AfterFeatures的任意setTimeout ,但是在早些时候了解exitCode并由于即将到来的registerHandler贬值而重新审视黑客之后我已经编辑了本地 run.js,它似乎工作得很好。 由于 1) Node 官方推荐,2) 虚拟 setTimeout 在并行运行时引入的每个进程延迟,以及 3) 由其他 Node 进程执行 Cucumber 时,绝对值得重新审视。

我想过永远挂起它,但是在单个步骤上超时不会处理无限的事情吗? 必须有一种优雅的方式来请求在 Node 中超时退出而不立即终止。

registerHandler('AfterFeatures', function (features, callback) {
  setTimeout(callback, 1000);
});

我很犹豫要不要这样做,因为我认为其他用户可能会遇到问题(我主要考虑的是那些使用它进行浏览器测试的人,我记得它挂起的地方)。 此外,该节点推荐仅存在于版本 6 和 8。它不存在于版本 4 中,版本 4 将在 2018 年 4 月之前得到支持(当节点停止支持时)。 不过,我最好为此添加一个 CLI 选项。 像--drain-event-loop这样的东西会使用 process.exitCode 而不是 process.exit。

只是想补充一点,这个问题为将 Cucumber.js 作为子进程运行提出了一个真正的问题。 我正在用--format json这样做,如果我的输出增长超过标准输出流的 8K 块大小,我只会在 Cucumber 的process.exit过早终止子进程之前取回第一个块,截断输出。 我删除了process.exit ,问题就解决了。

我会尽快为此提交拉取请求。

我提出了一个拉取请求,尽管根据@charlierudolph的首选解决方案它是不完整的; 我没有做 CLI 标志部分。

我有一个解决我遇到的特定问题的方法,那就是在使用 JSON 格式化程序的子进程中运行 Cucumber.js 会在第一个 stdout 流块之后截断输出,因为process.exit是如此艰难的退出该子进程不等待剩余部分。 解决方案只是将| cat到我的子进程命令中,这样我就可以在父进程中接收完整的输出。

欢迎任何人添加到上述 PR 中,或者在版本 4 日落后的几个月内按原样合并它可能是合适的。

由于关闭后没有任何近期活动,因此该线程已自动锁定。 请为相关错误打开一个新问题。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

edgarechm picture edgarechm  ·  5评论

bmsoko picture bmsoko  ·  7评论

lamartire picture lamartire  ·  6评论

jan-molak picture jan-molak  ·  4评论

edwinwright picture edwinwright  ·  3评论