我是茉莉花和间谍的新手,希望你能指出正确的方向。
我有一个事件监听器,我想用单元测试来覆盖:
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 :(得分: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();
});
});
答案 1 :(得分: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();
});
浏览器似乎将全局变量/函数连接到“窗口”对象,因此它将被监视。