2017-09-17 56 views
1

我是新來的茉莉花和間諜的事情,希望你能指出正確的方向。正在使用spyOn()而沒有可能的方法嗎?

我有一個我想與單元測試覆蓋的事件偵聽器:

var nextTurn = function() { 
    continueButton.addEventListener("click", displayComputerSelection) 
}; 

nextTurn(); 

的總體思路是,以窺探「displayComputerSelection」功能。

it ("should call fn displayComputerSelection on continueButton click", function(){ spyOn(displayComputerSelection); continueButton.click(); expect(displayComputerSelection).toHaveBeenCalled();

由於間諜的基本結構是spyOn(<object>, <methodName>)我得到迴應No method name supplied。 我試過試用jasmine.createSpy,但無法使其工作。 我將如何替換預期的方法?

回答

0

你的問題

在你的情況下,整個問題是如何或在哪裏被定義displayComputerSelection,因爲這是FUNC你想與你的間諜,以替換。

jasmine.createSpy()

這是你想要jasmine.createSpy()。例如,以下是您如何使用它的例子 - 完全未經測試 - 沒有雙關語意圖。

var objectToTest = { 
    handler: function(func) { 
    func(); 
    } 
}; 

describe('.handler()', function() { 
    it('should call the passed in function', function() { 
    var func = jasmine.createSpy('someName'); 

    objectToTest.handler(func); 

    expect(func.calls.count()).toBe(1); 
    expect(func).toHaveBeenCalledWith(); 
    }); 
}); 
+0

非常感謝! 'displayComputerSelection'是一個全局變量,所以我發現我只需要使用'window'作爲一個對象。 所以它這樣工作: 'spyOn(window,「displayComputerSelection」);'' –

0

在我的特定情況下的答案是:

it ("should call displayComputerSelection on continueButton click", function(){ 
    spyOn(window, "displayComputerSelection"); 
    start(); //first create spies, and only then "load" event listeners 
    continueButton.click(); 
    expect(window.displayComputerSelection).toHaveBeenCalled(); 
}); 

瀏覽器似乎全局變量/函數掛接到「窗口」對象,因此它是在被窺探。

相關問題