process.exit before console buffer flushed in Windows
还没有人认领这个 Issue。
评估
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 新手友好度
- 38/100
- Issue 类型
- 缺陷
- 描述清晰度
- 基本清楚
- 活跃度
- 停滞
- 技术栈
- javascript
- 领域
- cli, operating-systems, testing
调研方向
从 bin/nodeunit 的第 128-132 行附近开始,尤其是第 130 行的 process.exit(1),并在 Cygwin 下使用提供的 tests.js 重现该问题。确认失败的运行会显示所有控制台输出,同时仍返回退出代码 1;现有的 workaround 提供了用于验证的预期行为。
由索引模型根据 Issue 内容生成。
描述
Symptoms
If any test fails, not all the console output is shown (console output is truncated).
Problem does not show up in standard Windows cmd, but does show up if tests are run from Cygwin or within Sublime Text build system. In Cygwin, if the output is piped to a file instead of being displayed on the console then all the results show in the file, even though they did not show in the console when not piped.
Environment
- nodeunit 0.9.0,
- node 0.10.17
- Windows 7
Minimal Example
I have the following test file, tests.js:
for (var i = 0; i < 30; i++)
console.log('' + i);
exports.dummy = function(test) {
test.fail();
test.done();
}
Running from Cygwin, the result is:
$ nodeunit tests.js
0
(I.e., only the first console.log appears). But if I remove the test.fail line then all the output appears.
Cause
My guess of the cause is given in the title. It appears that under different circumstances, sometimes the node console is asynchronous (perhaps due to the way Windows pipes work, I'm not sure), and doesn't flush the output after every write. When a test fails, line 130 in nodeunit/nodeunit process.exit(1); seems to recognize the error and exit the process, but process.exit does not seem to always wait for the console output to be received by the terminal. To confirm this hypothesis, if I remove the process.exit line, then the output is displayed correctly.
Solution
A work-around seems to be to change lines 128-132 to the following:
testrunner.run(files, options, function(err) {
if (err) {
process.on('exit', function() {
process.exit(1);
});
}
});
This seems to produce the correct error code for the process and also show all the output. I don't know if there are any other side effects of not ending the process immediately in the callback function.
- 主要语言
- JavaScript
- 星标
- 1.9k
- 派生
- 359
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
caolan/nodeunit 的其他 Issue
-
难度 4/5 3-5 天 新手友好度 25/100
-
难度 3/5 1-2 天 新手友好度 35/100
-
难度 2/5 1-3 小时 新手友好度 42/100
-
难度 3/5 1-2 天 新手友好度 35/100
-
难度 5/5 一周以上 新手友好度 20/100
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 83/100
维护者通常 2 天内回复
-
feedback simulation workshop
难度 2/5 1-3 小时 新手友好度 72/100
githubnext/gh-aw-workshop#4755 ·
维护者通常 1 天内回复
-
fix
难度 1/5 1 小时以内 新手友好度 72/100
idean3885/claude-ops-agent#728 ·
维护者通常 1 天内回复
-
deck: add to staging level: easy p-feature: Privacy Policy priority: MUST HAVE ready for product role: front-end size: 0.25pt Waiting on Stakeholder
难度 2/5 1-3 小时 新手友好度 61/100
hackforla/tdm-calculator#3654 · 1 条评论 ·
维护者通常 1 天内回复
-
check:failed feeds:add
难度 1/5 1 小时以内 新手友好度 78/100