所以我试图通过一个Mongoose项目的教程,TDD风格,编写每个步骤应该完成的测试,然后按照实际的教程等来自学Jasmine(节点)。
当然,我的第一次测试失败了。
此时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)
(当然,jquery测试在这一点上仍然会失败。)我已经尝试过使用和不使用'app'。在expect子句中,但我得到了同样的错误 - 测试套件没有看到app.js的内部。但我知道它正在正确加载app.js文件,因为它正在运行它 - console.log输出出现在测试结果之前。
所以我怀疑我误解了范围或其他一些新手错误的根本性,但我不确定那是什么。
答案 0 :(得分:0)
Node.js结构化为模块。如果希望可以访问模块的属性,则必须在module.exports
变量中定义该模块的属性。这是导出的外观(请注意exports
引用module.exports
):
var mongoose = require('mongoose');
console.log(mongoose.version);
exports.mongoose = mongoose;
然后,当您使用上面显示的代码在文件上使用require()
时,将设置变量,其中app
等效于正在加载的模块中的module.exports
:
var app = require('../src/app.js');
console.log(app.mongoose.version);