使用模块加载器来演示Node.js的依赖注入功能
如果你对Node.js的依赖注入还有点困惑,你可以看下面的代码示例,看它在上下文中的使用,也许能帮你清楚一些。首先,我们创建一个简单的模块。
var fs = require('fs');
module.exports = {
// Do something with `fs`
}
想象一下这个很酷,对吗?不管怎样,现在我们来测试刚刚编写的那个模块,但是我们要模拟fs来看看它是怎么在内部使用的。
// Jasmine's syntax http://pivotal.github.com/jasmine/
describe('someModule', function() {
var loadModule = require('module-loader').loadModule;
var module, fsMock;
beforeEach(function() {
fsMock = {
// a mock for `fs`
};
// load the module with mock fs instead of real fs
module = loadModule('./web-server.js', {fs: fsMock});
});
it('should work', function() {
// a test that utilizes the fact that we can now control `fs`
});
});
需要注意的是在代码的7至12行,我们为fs创建了一个伪对象并使用我们新的loadModule函数将这个使用的对象联系到上面的小模块中(这样做非常棒,对不对?)。