Jasmine:如何正确窥探函数调用?

时间:2017-02-27 18:39:32

标签: javascript jasmine

我试图在下一个场景中测试一个函数调用:

JS

var Demo = function(option) {
  if (option) func();

  function func() {
    console.log('called')
  }

  return {
    'func': func
  }
}

Jasmine

beforeEach(function() {
  var demo = new Demo(true);
  spyOn(demo, 'func');

  this.demo = demo;
});

it("should call func()", function() {
  expect(this.demo.func).toHaveBeenCalled();
});

尽管它在控制台中记录了'called',但它的规格却失败了:

  

已经调用了预期的间谍功能。

从代码流开始,我认为它发生是因为在调用函数之后,间谍开始。所以我的问题是 - 在测试中捕获函数调用的正确方法是什么?

JSFiddle

1 个答案:

答案 0 :(得分:1)

这可能是更好的方法。添加func作为演示原型的一部分。那么你可以把间谍与原型联系起来。

var Demo = function(option) {
  if (option) this.func();
}

Demo.prototype.func = function(){
    console.log("called")
}

beforeEach(function() {
    spyOn(Demo.prototype, 'func')
  var demo = new Demo(true);
  this.demo = demo;
});

it("should call func()", function() {
  expect(this.demo.func).toHaveBeenCalled();
});

http://jsfiddle.net/kfu7fok1/6/