其他節點開發人員如何在單元測試中使用sinon模擬構造函數調用?例如,假設我有一些函數foo在節點中模仿構造函數
function foo() {
var dependency = new Dependency(args);
// do stuff with dependency
}
exports.module.foo = foo;
,並在一個單獨的測試文件我有一些測試中,我想覈實一下相關的構造函數被調用(參數),我需要控制什麼返回
的問題是,興農可以附加到一個對象只有模擬功能,所以我們要構造附加到一個對象時,它可以被嘲笑了。
我一直在做的只是把對象的構造函數連接到製作構造函數調用的模塊中,調用構造函數作爲對象的方法,然後導出對象使用它在測試中:
var Dependency = require('path/to/dependency');
var namespace = {
Dependency: Dependency
}
function foo() {
var dependency = new namespace.Dependency(args);
// do stuff with dependency
}
exports.moduole.foo = foo;
exports.module.namespace = namespace;
testfile的:
it('should call Dependency constructor with bar', function() {
var foo = require('myModule').foo;
var namespace = require('myModule').namespace;
var DependencyMock = sinon.mock(namespace, 'Dependency').returns(0);
foo();
expect(DependencyMock.calledWith(bar)).to.equal(true);
});
這工作,但感覺很笨重,露出我的模塊上的對象只是爲了測試它的緣故。
任何提示?
感謝您的回覆。據我所知,我遇到了同樣的問題,因爲我不能監視Dependency的實際構造函數調用,因爲Dependency不是任何屬性。問題在於我如何設計我的代碼,並且使用像上面Jan所示的依賴注入似乎對我來說是最好的解決方案。 –