1

我正在编写一个测试用例来监视点击事件的谷歌跟踪调用。代码中有两种情况。一、遍历页面上所有的超链接,在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”在每次执行时都通过了。

但是,第一种方法是在链接上创建一个数组,然后将点击事件绑定到强制测试用例失败的元素。从最后几个小时开始努力,但没有找到任何运气来找到这个问题的根本原因。请帮忙。

4

1 回答 1

1

i === linksCount这是测试运行结束时 for 循环的常见错误。您必须将对测试的调用包装到函数中并传递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)
}
于 2013-07-18T14:57:50.517 回答