因为我使用的是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编写单元测试?换句话说,如何在该函数上下文之外使用这些方法以便对它们进行测试?
答案 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