javascript - Jasmine spy : How to make it work when the spyed function reference is passed?

标签 javascript unit-testing jasmine

我正在使用 jasmine 来测试我的 javascript,并且我发现很难规范。我有一个直接传递给处理程序的函数:

filters.find('#per_page').change(checkList.filter);

现在,我想监视它,看看当我更改它时它是否被调用:

describe("when I change the number of items per page", function() {
   beforeEach(function() 
      spyOn(checkList, 'filter');
      $('#per_page').val('50').trigger('change'); 
   });
   it("filters the results list", function() {
     expect(checkList.filter).toHaveBeenCalled();
   });
});

此测试失败。令人惊讶的是,如果我将上面的代码更改为:

filters.find('#per_page').change(function() { checkList.filter(); });

它过去了。有没有办法监视传递的此类函数,或者我是否必须诉诸匿名函数的情况?

最佳答案

是的,有,但要做到这一点,必须在您的函数中添加 spy 后绑定(bind)事件。这样做的原因是 spy 用其他函数替换了该属性(它不会更改函数本身)。在您的情况下,发生的情况是您分配了原始函数,并且当您添加 spy 时,您替换了该属性,而没有更改绑定(bind)的回调。

如果您的应用程序的制作方式无法在进行事件绑定(bind)之前添加 spy ,那么唯一可以工作的就是使用调用正确回调的匿名函数。

关于javascript - Jasmine spy : How to make it work when the spyed function reference is passed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19292110/

相关文章:

javascript - 为什么要在模态解析上声明一个函数

javascript对象错误

javascript - 如何在 meteor 模板上使用 if 条件?

python - 禁用 sqlalchemy 事件监听器的方法

javascript - Jasmine spy On javascript getter 导致 karma 挂起

javascript - 如何在扩展垫行而不是主表中显示垫表

java - 使用 Mockito 返回泛型和基元的模拟方法

c# - 如何对返回匿名对象的 ASP.NET Core MVC Controller 进行单元测试?

reactjs - 如何用 jasmine 和 enzyme 测试 React useEffect hooks

jasmine - 在 Jasmine 记者完成之前防止 Protractor 退出