尝试使用nodejs和jasmine-node执行客户端javascript的单元测试。 我能够创建窗口和文档变量,$变量,设置环境(使用npm,不要忘记定义NODE_PATH!)。但现在我被困在这上面了。
我想测试的功能在一个模块中。我可以导入(需要)模块,但导入模块的变量无法从nodejs(或jasmine规范文件,因为我想象的相同原因)访问。
这是模块:
var test_module = (function () {
var init = function () {
return "toto";
}
return { init: init };
})();
在变量test_module中,我们应该找到包含所有导出函数的字典的变量(这里只有一个名为init)。
在nodejs中:
> require('test.js');
{}
> test_module
ReferenceError: test_module is not defined
at repl:1:2
at REPLServer.self.eval (repl.js:110:21)
at Interface.<anonymous> (repl.js:239:12)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)
at Interface._line (readline.js:531:8)
at Interface._ttyWrite (readline.js:760:14)
at ReadStream.onkeypress (readline.js:99:10)
at ReadStream.EventEmitter.emit (events.js:98:17)
at emitKey (readline.js:1095:12)
我不确定如何在nodejs中使用作用域。我试着说:
global.test_module = (function () {
这可行,但这不是我想做的。我的javascript应该在浏览器中运行一次测试,全局不会...
旁注:使用命令行,无浏览器和服务器解决方案对客户端javascript进行单元测试,我认为应该得到一个神教程。有一些但是它们通常是不完整的。
答案 0 :(得分:1)
好的,感谢htatche的回答,我找到了一个解决方法(似乎客户端的javascript单元测试是变通办法之地......):
var test_module = (function () {
var init = function () {
return "toto";
}
return { init: init };
})();
if(typeof exports != 'undefined'){
module.exports = test_module;
}
在此解释:http://caolanmcmahon.com/posts/writing_for_node_and_the_browser/
这样我就可以让nodejs和浏览器保持愉快。