1

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

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

正常吗?

有什么东西可以调整摩卡咖啡来完成这项工作吗?

4

1 回答 1

3

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

于 2013-05-30T15:50:16.653 回答