Jasmine jQuery循环单元测试

时间:2015-07-16 16:52:16

标签: javascript jquery jasmine

如何为循环的jQuery 编写Jasmine单元测试?例如,如果必须测试:

$(".class").each(function(index))
{ 
  testFunction()
}

HTML结构是一个div列表,每个div都有 class 作为类。

1 个答案:

答案 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 的元素数量进行比较。