Javascript 使用jasmine节点检查正在加载的节点模块

Javascript 使用jasmine节点检查正在加载的节点模块,javascript,node.js,jasmine,jasmine-node,Javascript,Node.js,Jasmine,Jasmine Node,所以我试着自学Jasmine(用于node),通过学习Mongoose项目的教程,TDD风格,编写每个步骤应该完成的测试,然后按照实际教程进行操作,等等 当然,我的第一次考试不及格 此时app.js有两行代码: var mongoose = require('mongoose'); console.log(mongoose.version); 这个很好。但是,我的测试仍然失败: var app = require('../src/app.js'); describe('App startup

所以我试着自学Jasmine(用于node),通过学习Mongoose项目的教程,TDD风格,编写每个步骤应该完成的测试,然后按照实际教程进行操作,等等

当然,我的第一次考试不及格

此时app.js有两行代码:

var mongoose = require('mongoose');
console.log(mongoose.version);
这个很好。但是,我的测试仍然失败:

var app = require('../src/app.js');

describe('App startup', function() {
    it('loads mongoose', function() {
            expect(app.mongoose.version).toBeDefined();
    });
    it('loads jasmine-jquery', function() {
            expect($).toBeDefined();
    });
});
导致

Failures:

1) App startup loads mongoose
Message:
 TypeError: Cannot read property 'version' of undefined
Stacktrace:
 TypeError: Cannot read property 'version' of undefined
at null.<anonymous> (/home/jbhelfrich/mongooseBlog/spec/init.spec.js:5:36)
故障:
1) 应用程序启动加载mongoose
信息:
TypeError:无法读取未定义的属性“版本”
堆栈跟踪:
TypeError:无法读取未定义的属性“版本”
在空。(/home/jbhelfrich/mongooseBlog/spec/init.spec.js:5:36)
(当然,jquery测试在这一点上仍然会失败。)我在expect子句中尝试了使用和不使用“app.”的测试,但我得到了相同的错误——测试套件没有看到app.js的内部结构。但我知道它正在正确加载app.js文件,因为它正在运行它——console.log输出显示在测试结果之前


所以我怀疑我误解了scope的一些基本概念,或者其他一些新手的错误,但我不确定这是什么。

Node.js是由模块构成的。如果要访问模块的属性,必须在
module.exports
变量中定义该模块的属性。这就是导出的外观(请注意,
exports
引用了
module.exports
):

然后,当您在包含上述代码的文件上使用
require()
时,将设置变量,其中
app
相当于
module。在正在加载的模块中导出

var app = require('../src/app.js');
console.log(app.mongoose.version);

工作很有魅力,谢谢你!是否有任何理由(安全、性能)删除导出。生产代码中的行,或者它们可以单独存在吗?没有理由删除导出,因为如果不导出变量,则无法在模块外部访问它们。
var app = require('../src/app.js');
console.log(app.mongoose.version);