我正在编写一个测试用例来监视谷歌跟踪点击调用事件。代码中包含两个场景。首先,遍历页面上的所有超链接,并在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)
}