4
我是新來的node.js和在我看到的大多數代碼中,我沒有看到IoC/DI樣式構造函數注入的依賴關係。如何模擬對象創建通過要求
相反,通常node.js擴展require()用於創建允許訪問外部模塊導出的本地變量。
但是,當編寫單元測試(即隔離單層/函數)時,如何模擬通過使用require創建的變量訪問的模塊?
/helpers/dataHelper.js
var dataModel = require('../models/dataModel.js');
var getFormattedDataForRegion = function(region, callback) {
var data = {};
// validate region
// query dataModel
// async.map format data items
// callback(data);
}
/tests/dataHelperTests.js
describe('dataHelper', function(){
it('getFormattedDataForRegion returns expected response', function(done){
var expectedData = {};
// populate expectedData
// **** need some way to mock dataModel *****
dataHelper.getFormattedDataForRegion("west", function(data){
expect(data).to.eql(expectedData);
done();
});
});
好吧,我已經想通過'proxyquire'存根模塊函數,但只有一個通用的存根傳遞任何參數。我如何可以爲特定的參數值存根特定的返回值? (通常用moq,rhino) – BaltoStar
顯然用'proxyquire'來超越瑣碎的存根,你必須創建一個完全模擬的模塊。我的模塊有一個屬性實例化爲具有原型函數的函數的實例,所以我需要將'myModule.myProperty.read(id)'存根。這可以用'proxyquire'完成,而不需要編寫'mockMyModule'? – BaltoStar
@BaltoStar你似乎需要[sinon.js](http://sinonjs.org/)。查看他們的「功能一覽」部分(幾乎在主頁底部)。 – Esteban