测试锚链接调用与 Mocha & Sinon



我正在编写一个测试用例来监视谷歌跟踪点击调用事件。代码中包含两个场景。首先,遍历页面上的所有超链接,并在for循环中调用click方法。其次,为各个元素编写独立的测试用例。

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"在每次执行时都获得了通过。

但是,第一种方法是在链接上创建一个数组,然后将点击事件绑定到元素,迫使测试用例失败。在过去的几个小时里,我一直在努力,但并没有找到这个问题的根本原因。请帮忙。

这是for循环的常见错误,当测试运行时,循环的末尾为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)
}

最新更新