使用具有动态功能绑定的测试间谍的好方法

时间:2013-06-27 16:23:36

标签: javascript unit-testing jasmine spy function-binding

我正在使用$.proxy(this, 'methodName')将我的对象的方法用作DOM事件的事件处理程序。

在测试时,我想使用Jasmine的spyOn来监视回调是否被触发。但是,当我监视方法时,侦听器附加在我的Object的构造函数中已经太晚了,而$.proxy已经使用了原始的,未经修补的函数。

解决这个问题的好方法是什么?我考虑过的一件事是直接监视原型的方法,但我担心这可能对每个测试的影响独立于其他测试。另一种方法是改变我在代码中附加听众的方式,但这似乎就像用洗澡水把婴儿扔出去一样。

1 个答案:

答案 0 :(得分:0)

您可以在测试开始之前监视对象的原型。因此,它不会对您的其他测试产生任何影响。

var function A {
  $.proxy(this, 'methodName');
}

a.prototype.methodName = function() {
  console.log('test');
}

describe('…', function() {
  var a;
  before(function() {
    jasmine.spyOn(a.prototype, 'methodName');
    a = new A();
  });

  it('should…', function() { 

  });

});