我有config/index.js哪个根据设置的NODE_ENV环境变量返回不同的配置文件。
config/index.js
我正在尝试编写一个简单的测试以确保为每个环境返回正确的配置,但是我遇到了一个问题,其中实际上仅调用了第一个需求,而同一文件的后续需求正在使用来自首先要求。
我应该如何更改测试以解决此问题?
describe('config', function () { it('should return dev config', function (done) { process.env.NODE_ENV = 'development'; var config = require(__dirname + '/../../config'); // development config console.log(config.plugins.ipFilter); done(); }); it('should return prod config', function (done) { process.env.NODE_ENV = 'production'; // development config from above. // the require here doesn't actually get invoked var config = require(__dirname + '/../../config'); console.log(config.plugins.ipFilter); done(); }); });
config/index.js这是我正在尝试测试的简化版本(工作正常):
var Hoek = require('hoek'); var settings = { 'defaults': require('./settings/defaults'), 'production': require('./settings/production') }; var env; switch (process.env.NODE_ENV) { case 'production': env = 'production'; break; case 'development': env = 'development'; break; default: env = 'defaults'; break; } var config = Hoek.applyToDefaults(settings['defaults'], settings[env]); module.exports = config;
在运行第二项测试之前,我将从Node的模块缓存中删除该模块:
var resolved = require.resolve(__dirname + '/../../config'); delete require.cache[resolved];
因此,当再次需要它时,Node将从头开始加载。请注意,上面的代码只会config从缓存中删除模块。如果您需要删除由加载的模块require调用 里面 的config模块,那么你就必须做到上面一样为他们每个人也。
config
require
顺便说一句,如果您的测试将变得异步,则您需要done像当前一样的回调。如果您的测试要保持现在的同步,则可以done从提供的回调的参数列表中删除it并省略调用它。
done
it