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



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

当涉及到测试时,我想使用Jasmine的spyOn来监控回调是否被触发。然而,当我开始监视该方法时,由于侦听器已附加在对象的构造函数中,所以为时已晚,而且$.proxy已经使用了原始的、未复制的函数。

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

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

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