没有方法可以使用spyOn()吗?

时间:2017-09-17 06:26:01

标签: jasmine 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,但无法使其正常工作。 我将如何替代预期的方法?

2 个答案:

答案 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();
});

浏览器似乎将全局变量/函数连接到“窗口”对象,因此它将被监视。