1

我是茉莉花和间谍的新手,希望你能指出正确的方向。

我有一个我想用单元测试覆盖的事件监听器:

    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 进行试验,但无法使其工作。我将如何替代预期的方法?

4

2 回答 2

1

你的问题

在你的场景中,整个问题是如何或在哪里displayComputerSelection定义,因为这个函数是你想要用你的间谍替换的。

茉莉花.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();
  });
});
于 2017-09-21T18:28:41.670 回答
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();
});

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

于 2017-09-24T07:48:49.170 回答