我正在使用 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/