我有以下 JavaScript:
var async = require('async');
var MyOutputModel = function(persistenceModel, callback) {
async.each(persistenceModel.helpOffers, function(helpOffer, asyncCallback) {
console.log('Original source (loop)');
//Do something ...
asyncCallback();
}, function(err) {
console.log('Original source (done)');
console.log(err);
if(err) return callback(err);
return callback(null, _this);
});
};
module.exports = MyOutputModel;
我想测试包含if(err) return callback(err);
...的路径
为此,我看到使用 rewire ( https://www.npmjs.com/package/rewire ) 进行依赖注入的唯一可能性。
在我的单元测试中:
var rewire = require('rewire');
var MyOutputModel = rewire('...');
var AsyncMock = function() {};
AsyncMock.prototype.each = function(array, successCallback, errorCallback) {
console.log('Inside mock!');
callback(new Error());
};
var asyncMock = new AsyncMock();
MyOutputModel.__set__('async', asyncMock); //Rewire for require-dependency-injection
//Act
new CdObjectOutputModel(cdObjectPersistenceModel, function(err, cdObjectOutputModel) {
//Assert
assert(err);
});
然而,“模拟”似乎没有被使用。在我的单元测试中,我从来没有在'Inside mock!'
控制台上看到过。并且没有错误。'Original source (loop)'
'Original source (done)'
我做错什么了吗?我已经将 rewire 用于类似的用例,并且效果很好。还是有其他方法?