2016-04-22 72 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 

I a我可能錯過了一些東西,我會很感激你的幫助。

回答

1

你磕碰functions對象的方法myFunction,但在waterfall方法你調用一個myFunction功能(其實我不能在我的環境中運行你的代碼,我得到「的ReferenceError: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