运行摩卡测试循环同步

问题描述:

我阵列上运行的摩卡测试循环,像这样:运行摩卡测试循环同步

it('each should have permissions defined for each role', function(done) { 
    async.forEach(_permissions, function(permission, callback) { 
     log.debug(permission.permissions.should.be.an.instanceOf(Array).and.not.be.empty); 
     callback(permission.permissions.should.be.an.instanceOf(Array).and.not.be.empty); 
    }, 
    function(result) { 
     log.debug(result); 
     done(); 
    }); 
}); 

当我登录出来,看来即使我使用done()回调异步运行。是这样吗?我的测试是否仍然成功执行,还是仅执行第一个测试,然后返回成功结果?

这里是控制台输出:

[Tue Dec 02 2014 09:24:07 GMT-0800 (PST)] DEBUG { obj: [ 'permissions!' ], params: { operator: 'to be empty' }, negate: false } 
    ✓ each should have permissions defined for each role // <- here's the test result 
[Tue Dec 02 2014 09:24:07 GMT-0800 (PST)] DEBUG { obj: [ 'permissions!' ], params: { operator: 'to be empty' }, negate: false } 
[Tue Dec 02 2014 09:24:07 GMT-0800 (PST)] DEBUG { obj: [ 'permissions!' ], params: { operator: 'to be empty' }, negate: false } 
[Tue Dec 02 2014 09:24:07 GMT-0800 (PST)] DEBUG { obj: [ 'permissions!' ], params: { operator: 'to be empty' }, negate: false } 

使用eachSeries,这让我也过去。 forEach是平行版本。

使用像这样:

it('each should have permissions defined for each role', function(done) { 
    async.eachSeries(_permissions, function(permission, callback) { 
     permission.permissions.should.be.an.instanceOf(Array).and.not.be.empty; 
     callback(); 
    }, 
    function(err) { 
     done(); 
    }); 
}); 
+0

DOH!真棒;) – brandonscript 2014-12-02 17:37:55

+0

它实际上是'eachSeries'?当我使用它时,现在只有一个测试执行。 – brandonscript 2014-12-02 17:41:17

+0

啊,不得不稍微修改 - 断言需要不在回调中。 – brandonscript 2014-12-02 17:44:59