【问题标题】:Testing anchor links call with Mocha & Sinon使用 Mocha 和 Sinon 测试锚链接调用
【发布时间】:2013-07-18 14:38:11
【问题描述】:

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

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

【问题讨论】:

    标签: javascript bdd mocha.js sinon


    【解决方案1】:

    这是 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)
    }
    

    【讨论】:

    • 非常感谢,拯救了我的一天。如果您不介意,请分享一些有用的博客链接,以阅读有关此 for 循环问题的更多信息。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2015-12-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    相关资源
    最近更新 更多