如何让mocha让我的程序写文件?

时间:2013-05-30 15:41:40

标签: node.js mocha

我有一种非常奇怪的行为(从我的角度来看):

当我使用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

这是正常的吗?

有没有什么可以调整摩卡来使这项工作?

1 个答案:

答案 0 :(得分:2)

几乎可以肯定你忘了在你的describe / it函数参数列表中包含done回调,所以mocha认为你的测试是同步的,它没有任何方法可以知道你的IO何时完成,所以很快当你的函数返回时,mocha结束这个过程。但正如@BenjaminGruenbaum指出的那样,你省略了代码中有趣的部分,所以发布完整的代码后我们就会确认。