我有一种非常奇怪的行为(从我的角度来看):
当我使用mocha进行单元测试时,我无法写任何文件(我可以创建文件,但没有写入任何文件)。
作为一个例子,我有这段代码:
console.log('The beginning');
var fs = require('fs');
var writableStream = fs.createWriteStream("./testOuputFile.txt");
function callback(s){
console.log('callback', s);
}
writableStream.on("error", function(err) {
console.log("ERROR");
done(err);
});
writableStream.on("close", function(ex) {
console.log("CLOSED");
done();
});
writableStream.on("finish", function(ex) {
console.log("ENDED");
done();
});
writableStream.on("open", function(fd) {
console.log("OPENED:"+fd);
});
if(typeof callback === "undefined"){
callback = function(s){console.log(s);};
}
var cbCalled = false;
function done(err) {
if (!cbCalled) {
callback(err);
cbCalled = true;
}
}
writableStream.write('Something');
writableStream.end();
fs.writeFile('message.txt', 'Hello Node', function (err) {
if (err) throw err;
console.log('It\'s saved!');
});
console.log('The end');
将此代码复制到名为run.js的文件中并运行'node run.js'将输出:
The beginning
The end
OPENED:11
ENDED
callback undefined
CLOSED
It's saved!
我获得了两个包含一些文本的好文件:testOutputFile.txt和message.txt
对名为test / test.js的文件执行相同操作并运行'mocha'将输出:
The beginning
The end
0 tests complete (0 ms)
我获得了两个空文件(零字节):testOutputFile.txt和message.txt
这是正常的吗?
有没有什么可以调整摩卡来使这项工作?
答案 0 :(得分:2)
几乎可以肯定你忘了在你的describe / it函数参数列表中包含done
回调,所以mocha认为你的测试是同步的,它没有任何方法可以知道你的IO何时完成,所以很快当你的函数返回时,mocha结束这个过程。但正如@BenjaminGruenbaum指出的那样,你省略了代码中有趣的部分,所以发布完整的代码后我们就会确认。