[英]Javascript unit testing - using Jasmine to spy on self-invoking function
使用這樣的javascript結構:
var myClass = function(myArgumentObject) {
var vm = {
myFunction: myFunction,
myVariable: myVariable
}
return vm;
myFunction() {
myVariable = 1 + 1;
myArgumentObject.aMethod();
}
} (myArgumentObject);
如何(如果有的話)使用Jasmine框架監視(即模擬出)myArgumentObject,以便可以對myFunction進行單元測試?
這樣做:
it('test myFunction', function () {
myClass.myFunction();
expect(myClass.myVariable).toEqual(2);
});
失敗,因為嘗試在myArgumentObject上調用方法時出現錯誤。 我知道我可以使用jasmine.createSpy創建一個偽造的myArgumentObject,但看不到如何傳遞它。
好問題! 測試是關鍵。
您可以在測試中定義參數/輸入:
it ('test myClass function', function() {
myArgumentObject = function() {
this.aMethod: jasmine.createSpy();
};
// mock out initial values for your other variables here, eg myVariable
spyOn(vm, 'myFunction').andCallThrough();
myClass(myArgumentObject)
expect(myArgumentObject.aMethod).toHaveBeenCalled()
expect(vm.myVariable).toEqual(2)
});
請記住兩點-您的'return vm'語句將盡早切斷您的功能-您將不需要它。
您應該盡早定義變量,以免出錯。 考慮將myFunction移動到“ vm”對象上方。
因此,我假設以下情況,您有一個名為myArgumentObject
的全局變量,其具有函數aMethod
。 然后,您可以像這樣使用茉莉花監視此功能。
it('test myFunction', function () {
spyOn(myArgumentObject, 'aMethod')
myClass.myFunction();
expect(myClass.myVariable).toEqual(2);
});
但是,如果沒有gloabl變量,則無法測試,因為然后undefined
會傳遞給測試,並且它將始終失敗,因為您無法在函數范圍內更改私有變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.