Javascript 使用nodejs和require确定mecanism的范围

Javascript 使用nodejs和require确定mecanism的范围,javascript,node.js,unit-testing,jasmine,Javascript,Node.js,Unit Testing,Jasmine,尝试使用nodejs和jasmine节点执行客户端javascript的单元测试。 我能够创建窗口和文档变量,一个$variable,设置环境(使用npm,不要忘记定义NODE_PATH!)。但现在我被困在这个问题上了 我想测试的功能在一个模块中。我可以导入(需要)模块,但无法从nodejs(或jasmine spec文件,原因与我想象的相同)访问导入模块的变量 以下是模块: var test_module = (function () { var init = function () {

尝试使用nodejs和jasmine节点执行客户端javascript的单元测试。 我能够创建窗口和文档变量,一个$variable,设置环境(使用npm,不要忘记定义NODE_PATH!)。但现在我被困在这个问题上了

我想测试的功能在一个模块中。我可以导入(需要)模块,但无法从nodejs(或jasmine spec文件,原因与我想象的相同)访问导入模块的变量

以下是模块:

var test_module = (function () {
  var init = function () {
    return "toto";
  }

  return { init: init };
})();
在变量test_模块中,我们应该找到包含字典和所有导出函数的变量(这里只有一个名为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)
这是可行的,但这不是我想做的。我的javascript应该在测试后在浏览器中运行,而global则不行


旁注:我想,使用命令行、无浏览器和无服务器解决方案对客户端javascript进行单元测试应该得到一个非常棒的教程。有一些是存在的,但它们通常是不完整的。

好的,多亏了htatch的回答,我找到了一个解决办法(客户端javascript单元测试似乎是解决办法的领域……):

此处解释:

这样,我可以让nodejs和浏览器满意。

您还需要在模块文件的末尾导出模块
module.exports=test\u module
。然后从主文件
var test_module=require(“test.js”)你不应该在node.jsTo-htatch中测试浏览器代码:是的,但那是nodejs的事情。。。浏览器将如何管理这一点。我想它不会喜欢这种出口业务。这里的目的是对客户端javascript模块进行单元测试,即从html页面中的标记加载模块。致vkurchatkin:好的,那么如何通过命令行进行单元测试(而不必加载浏览器页面)?这是一种常见的.js模式,请进一步了解。
global.test_module = (function () {
var test_module = (function () {
  var init = function () {
    return "toto";
  }

  return { init: init };
})();

if(typeof exports != 'undefined'){
    module.exports = test_module;
}