如何为jQuery for循环编写Jasmine单元测试?例如,如果必须对此进行测试:

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


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

最佳答案

您需要利用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,您可以一起玩。

要点是对窗口对象的testFunction进行存根的spyOn调用。这样就可以覆盖对testFunction的每次调用,并以我们希望的任何方式对其做出反应。在这种情况下,我们只是简单地让它执行,并使用calls.count()对其进行计数,然后将其与class类的元素数量进行比较。

关于javascript - Jasmine jQuery循环单元测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31460176/

10-11 13:39