如何为循环的jQuery 编写Jasmine单元测试?例如,如果必须测试:
$(".class").each(function(index))
{
testFunction()
}
HTML结构是一个div列表,每个div都有 class 作为类。
答案 0 :(得分:1)
您需要使用Jasmine spies跟踪调用功能,如下所示
function testFunction() {
alert("asd");
}
function foo() {
$(".class").each(
function(index) {
testFunction()
}
)
}
describe("foo()", function () {
var wrapper;
beforeEach(function() {
spyOn(window, 'testFunction');
});
it("calls testFunction for each element", function () {
foo();
expect(window.testFunction.calls.count()).toEqual(jQuery(".class").length);
})
});
我为你写了一个你可以玩的JSFiddle。
主要是 spyOn 调用,它存根 window 对象的 testFunction 。这样就可以覆盖testFunction上的每个调用,并以任何方式对其做出反应。在这种情况下,我们只需让它执行并使用 calls.count()在其后执行调用计数,并将其与类 class 的元素数量进行比较。