Nodejs断言不执行Mocha测试

时间:2013-12-21 13:51:38

标签: node.js unit-testing assert mocha

我遇到一个奇怪的问题,我为我的模块编写了多个测试,但最后一个没有用。我测试了一个异步函数,一切都很好,除非测试失败。我不知道为什么但是assert.equal之后的代码没有被执行。如果测试成功,则正确调用done。

describe('download', function(){

    it('should download pictures from given URLs', function(done){
        Download.download(list, function(){

            var pictures = fs.readdirSync("exports/merge/");

            console.log('before assert - '+pictures.length);
            assert.equal(pictures.length, 3);
            console.log('before done - '+pictures.length);
            done();
        });
    });
});

打印“断言前”的日志,然后什么也没发生。 如果I pictures.length等于3,则正确调用done()。

1 个答案:

答案 0 :(得分:1)

承诺吞下错误。为了抛出它们,最简单的解决方案是使用.done()结束承诺链。

    var p = Download.download(list, function(){

        var pictures = fs.readdirSync("exports/merge/");

        console.log('before assert - '+pictures.length);
        assert.equal(pictures.length, 3);
        console.log('before done - '+pictures.length);
        done();
    });
    p.done();

有关主题的详情,请参阅bluebird's documentationQ's documentation

  

当你到达承诺链的末尾时,你应该返回最后的承诺或结束链。由于处理程序捕获错误,因此异常可能未被观察到的是一种令人遗憾的模式。   因此,要么将其返回,要么将其结束