2016-04-22 3 views
1

私はSinon.jsを使用して私の機能の一つをスタブしてasync.waterfallをテストしようとしています。Sinon.JSでasync.waterfallをスタブして

// functions.js 
module.exports = { 
    // function I don't want to run 
    doBigThing: function() { 
    console.log("[doBigThing] was called"); 
    }, 

    // function I want to stub 
    myFunction: function(number, callback) { 
    console.log("[myFunction] was called"); 
    doBigThing(); 
    callback(null, number); 
    }, 

    // function I want to test 
    waterfall: function(callback) { 
    return async.waterfall([ 
     async.constant(5), // 5 just for the demo 
     myFunction 
    ], callback); 
    } 
} 

そして、私のテストは次のとおりです。

describe('water', function() { 
    it ('successfully falls', function() { 
    // function under test 
    var waterfall = functions.waterfall; 

    var callback = function(err, number) { 
     expect(err).to.be.null; 
     expect(number).to.equal(5); 
    }; 

    // I would like this stub to run instead of functions.myFunction 
    sinon.stub(functions, 'myFunction', function(number, callback) { 
     console.log("[myFunction] stub was called"); 
     callback(null, number); 
    }); 

    waterfall(callback); 
    // I suppose this is happening: myFunction(5, callback) 
    expect(functions.myFunction.withArgs(5, callback)).to.have.been.called; 
    expect(callback).to.have.been.called; 
    }); 
}); 

ので、テストに合格したが、doBigThingが呼び出されたため、スタブが、無視されます。

Water 
    ✓ successfully falls 
[myFunction] was called 
[doBigThing] was called 

代わりに私が

を見たいのですが
Water 
    ✓ successfully falls 
[myFunction] stub was called 

a aおそらく何かを見逃していて、私はあなたの助けに感謝します。

答えて

1

あなたがfunctionsオブジェクトのメソッドmyFunctionをスタブしているが、waterfall方法であなたは(私は実際に私は「にReferenceErrorを取得し、私の環境でコードを実行することはできませんmyFunction機能を呼び出している:MyFunctionのは定義されていません")。だから、これは動作するはずです:

// functions.js 
var functions = { 
    // function I don't want to run 
    doBigThing: function() { 
    console.log("[doBigThing] was called"); 
    }, 

    // function I want to stub 
    myFunction: function(number, callback) { 
    console.log("[myFunction] was called"); 
    functions.doBigThing(); // CHANGE HERE 
    callback(null, number); 
    }, 

    // function I want to test 
    waterfall: function(callback) { 
    return async.waterfall([ 
     async.constant(5), // 5 just for the demo 
     functions.myFunction // CHANGE HERE 
    ], callback); 
    } 
}; 

module.exports = functions; 
+0

私は、コードを実行していると私はあなたが望む結果を得る: を✓成功し [MyFunctionを]スタブが呼び出された滝 – jkondratowicz

関連する問題