访问超出范围的方法以进行单元测试

时间:2013-12-27 22:54:24

标签: javascript unit-testing qunit zepto

因为我使用的是Zepto JavaScript库,所以我的所有应用程序代码都必须包含在一个名为Zepto的函数中。直到最近,当我尝试编写单元测试时,这不是问题。我意识到我无法访问我的API,因为它在该函数的范围内。

这是我的主要JS文件的样子:

Zepto(function(){
    var MyAPI = (function(){
        function myMethod() {
        ....
        }
        return {
            myMethod: myMethod
        }
    })(); 

    MyAPI.myMethod(); // works correctly
});

这是我的单元测试文件的样子(我正在使用Qunit):

// include my main JS file 

test( 'MyAPI unit test', function() {
    // The test obviously fails because MyAPI is outside of scope
    ok( typeof MyAPI.myMethod === 'function', 'MyAPI is available' );
}); 

所以,我的问题是,如何为必须封装在Zepto函数中的API编写单元测试?换句话说,如何在该函数上下文之外使用这些方法以便对它们进行测试?

1 个答案:

答案 0 :(得分:2)

我能够通过在全局变量中存储某些方法来解决这个问题。这提供了两全其美,允许我在参考Zepto函数之外的方法时访问Zepto的功能。

更新主JS文件:

var app = {}; 

Zepto(function(){
    app.MyAPI = (function(){
        function myMethod() {
        ....
        }
        return {
            myMethod: myMethod
        }
    })(); 

    app.MyAPI.myMethod(); // works correctly
});

更新了测试套件文件:

setTimeout(function(){

    test( 'MyAPI unit test', function() {
        // The test now works because MyAPI is stored in the global 'app'
        ok( typeof app.MyAPI.myMethod === 'function', 'MyAPI is available' );
    }); 

}, 3000); // Give Zepto time to instantiate