如何将 mochas done 回调函数传递给另一个辅助函数
How can I pass mochas done callback function to another helper function
我有一段代码,我将在 mocha 的 then 语句中多次使用它,所以我将它变成了一个函数。但是,我还需要在该函数内调用 done()
,它超出了范围,导致错误 Uncaught ReferenceError: done is not defined。这是一个代码片段:
var collectionChecker = function(results) {
expect(Array.isArray(results), 'Did not return collection');
expect(results.length === numAttr, 'Returned wrong number of models');
done();
};
test('returns a collection with correct number of models', function(done) {
attrs.getAttributeTemplates().then(collectionChecker);
});
如何将 done()
传递给我的函数?
我通过链接另一个 .then 并在那里调用 done 找到了解决方法,但这似乎是一种丑陋的方法。
你想多了 - mocha 支持 promise,你可以 return 一个 promise,如果它被满足,测试就会通过(如果 expects 抛出,它就会失败):
var collectionChecker = function(results) {
expect(Array.isArray(results), 'Did not return collection');
expect(results.length === numAttr, 'Returned wrong number of models');
};
// just add a return, no `done` here or anywhere
test('returns a collection with correct number of models', function() {
return attrs.getAttributeTemplates().then(collectionChecker);
});
我有一段代码,我将在 mocha 的 then 语句中多次使用它,所以我将它变成了一个函数。但是,我还需要在该函数内调用 done()
,它超出了范围,导致错误 Uncaught ReferenceError: done is not defined。这是一个代码片段:
var collectionChecker = function(results) {
expect(Array.isArray(results), 'Did not return collection');
expect(results.length === numAttr, 'Returned wrong number of models');
done();
};
test('returns a collection with correct number of models', function(done) {
attrs.getAttributeTemplates().then(collectionChecker);
});
如何将 done()
传递给我的函数?
我通过链接另一个 .then 并在那里调用 done 找到了解决方法,但这似乎是一种丑陋的方法。
你想多了 - mocha 支持 promise,你可以 return 一个 promise,如果它被满足,测试就会通过(如果 expects 抛出,它就会失败):
var collectionChecker = function(results) {
expect(Array.isArray(results), 'Did not return collection');
expect(results.length === numAttr, 'Returned wrong number of models');
};
// just add a return, no `done` here or anywhere
test('returns a collection with correct number of models', function() {
return attrs.getAttributeTemplates().then(collectionChecker);
});