我在JavaScript文件中有一個方法。Jasmine:測試函數,使用jasmine從不同的函數調用
function foo() {
setTimeout(function() {
bar.getSomeUrl();
},WAIT_FOR_SOMETIME);
}
現在getSomeUrl()
實現如下。
var bar = {
getSomeUrl : function(){
window.location.href = 'someUrl';
return;
},
anotherProp : function() {
return bar.getSomeUrl();
}
};
我試圖測試,當我稱之爲foo()
方法getSomeUrl()
方法將被調用。
我正在使用茉莉花進行測試。我的茉莉花測試如下:
describe('This tests getSomeUrl()', function() {
it('is called when foo() is called', function(){
spyOn(bar,'getSomeUrl').and.callFake(function(){});
window.foo();
expect(bar.getSomeUrl).toHaveBeenCalled();
});
});
我真的不關心什麼測試的getSomeUrl()
內部發生的,因爲我有一個單獨的測試。
我試圖測試的是,當我從某處調用我的foo()時,getSomeUrl()
被調用。
我有以下問題:
- 如果我做這樣的測試失敗,並在運行所有測試結束後,將瀏覽器重定向到
someUrl
。我沒想到會發生這種情況,因爲我認爲自從我在bar.getSomeUrl()
上有一名間諜,並且正在返回fake method
,所以當我撥打window.foo()
時,實際上並不會調用bar.getSomeUrl()
。 所以我想可能是我應該做的,如下:
預期(window.foo).toHaveBeenCalled();
這沒有意義,因爲我試圖測試bar.getSomeUrl()
被調用。
但是我這樣做的時候,測試失敗,我得到了以下錯誤:
Error: Expected a spy, but got Function.
我還以爲這可能是setTimeout
功能,導致該問題,改變了foo()
功能:
function foo() {
bar.getSomeUrl();
};
沒有任何改變
我一直與茉莉e和Javascript,現在只有幾天,並且對事情的工作有廣泛的理解。
任何建議,使這個測試通過,也是一個指針,我做錯了什麼是非常感謝。
它不是java相關的。 JavaScript拼寫一個詞,並與Java沒有任何關係。 –
照顧到了這一點。謝謝。 – ChillBan123
你有一個語法錯誤。 'bar.getSomeUrl'是一個對象文字(語法無效)。這不是一個功能 – Phil