javascript - 使用具有动态函数绑定(bind)的测试 spy 的好方法

标签 javascript unit-testing jasmine spy function-binding

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

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

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

最佳答案

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

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

  });

});

关于javascript - 使用具有动态函数绑定(bind)的测试 spy 的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17348362/

相关文章:

javascript - 如何通过拆分字符串将数组转换为对象?

django - 是否有模拟 Django 模型的标准方法?

java - 如何在spock测试中模拟私有(private)方法的返回值

angular - 错误 :NullInjectorError: No provider for Router

javascript - Jasmine 无法检测复选框

javascript - 需要对带有选项卡导航(分页)的猫头鹰幻灯片进行 jquery 和 litte html css 改进

javascript - 对工作日的对象进行排序,例如星期日、星期一、...、星期六

Angular Testing 错误 : Can't resolve all parameters for WelcomeComponent: (? )

javascript - Angular : compile google maps infoWindow content to use ng-click

python - 为什么 unittest.Test Cases 看不到我的 pytest fixtures?