gpt4 book ai didi

node.js - Mocha Monitor 应用程序输出

转载 作者:IT老高 更新时间:2023-10-28 23:09:14 25 4
gpt4 key购买 nike

我正在 nodejs 中为我的 Web 应用程序构建一个日志记录模块。我希望能够使用 mocha 测试我的模块将正确的消息输出到 terminal。我一直在环顾四周,但没有找到任何明显的解决方案来检查这一点。我找到了

process.stdout.on('data', function (){})

但无法使其正常工作。有人有什么建议吗?

最佳答案

process.stdout 永远不会发出 'data' 事件,因为它不是可读流。您可以在 node stream documentation 中阅读所有相关信息。 ,如果你好奇的话。

据我所知, Hook 或捕获 process.stdoutprocess.stderr 的最简单方法是替换 process.stdout.write 具有执行您想要的功能的功能。 super hacky,我知道,但在测试场景中,你可以在钩子(Hook)之前和之后使用以确保它被解开,所以它或多或少是无害的。因为它无论如何都会写入底层流,如果你不解开它,它不是世界末日。

function captureStream(stream){
var oldWrite = stream.write;
var buf = '';
stream.write = function(chunk, encoding, callback){
buf += chunk.toString(); // chunk is a String or Buffer
oldWrite.apply(stream, arguments);
}

return {
unhook: function unhook(){
stream.write = oldWrite;
},
captured: function(){
return buf;
}
};
}

你可以像这样在 mocha 测试中使用它:

describe('console.log', function(){
var hook;
beforeEach(function(){
hook = captureStream(process.stdout);
});
afterEach(function(){
hook.unhook();
});
it('prints the argument', function(){
console.log('hi');
assert.equal(hook.captured(),'hi\n');
});
});

这里有一个警告:mocha 记者打印到标准输出。据我所知,他们不会在示例 (it('...',function(){})) 函数运行时这样做,但如果你的示例可能会遇到麻烦函数是异步的。我会看看能不能找到更多关于这个的信息。

关于node.js - Mocha Monitor 应用程序输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18543047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com