2013-07-18 78 views
1

我正在编写一个测试用例来窥探谷歌跟踪对点击事件的调用。代码中包含两种情况。一,遍历页面上的所有超链接,并在for循环内调用click方法。其次,为各个元素编写独立的测试用例。测试与摩卡和Sinon的链接呼叫

describe("Container Tags Automated Test Suite", function() { 

    var spy; 
    var assert = sinon.assert; 

    beforeEach(function() { 
     spy = sinon.spy(window.spyConfig.object, window.spyConfig.method); 
    }); 

    afterEach(function() { 
     spy.restore(); 
    }); 

    // Trackable links & total links count 
    var links = $("a.wrapper-link"), 
     linksCount = links.length; 

    //FIRST APPRAOCH : MAKE ARRAY OF LINKS 
    for(var i=0; i < linksCount ; i++) { 
     it ("Track All page links", function() { 
      link = $(links[i]); 
      link.click(); 
      assert.called(spy); 
     }); 
    } 

    //SECOND APPROACH : Invidual Selectors 
    it ("Track single link", function() { 
     link = $('a.wrapper-link'); 
     link.click(); 
     assert.called(spy); 
    }); 

}); 

问题:如果我们使用独立的jQuery选择每个测试用例一切工作正常。例如。测试案例“Track Single Link”在每次执行时都通过了。

但是,第一种方法是在链接上创建数组,然后将click事件绑定到强制测试用例失败的元素。过去几个小时努力尝试,但没有找到任何运气找到这个问题的根源。请帮忙。

回答

1

这是循环的常见错误,其中在测试运行时末端i === linksCount。您必须将调用包装到函数中,并将i传递到函数中,以将其保存在函数的范围中。

//FIRST APPRAOCH : MAKE ARRAY OF LINKS 

for(var i=0; i < linksCount ; i++) { 
    (function(cnt){ 
     it ("Track page the " + cnt + ". link", function() { 
     link = $(links[cnt]); 
     link.click(); 
     assert.called(spy); 
     }); 
    })(i) 
} 
+1

谢谢很多人,救了我的一天。如果您不介意,请分享一些有用的博客链接,以了解关于此循环问题的更多信息。非常感谢。 –