次の 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 を使用しており、完全に機能しました。それとも別のアプローチがありますか?