在Java中使用JUnit和Maven时,可以为src/main
和src/test
提供单独的属性文件。这允许代码和测试的不同配置,让Maven通过使用Java类路径来管理资源。
Node.js运行的Javascript代码有类似的方法吗?我使用Mocha进行单元测试,使用Grunt进行任务管理。
script.js
的代码示例:
var config = require('./config/dev/app.js');
exports.getFileName = function() {
return config.fileName; // returns 'code.txt'
}
我需要的是让script.js
在test.js
单元测试中需要时使用不同的配置文件:
var assert = require('assert');
var s = require('./script.js');
describe('Test', function () {
it('should use different config file', function() {
assert.equal('test.txt', s.getFileName());
});
});
有没有办法在./config/test/app.js
中使用不同的配置script.js
而无需更改script.js
的代码?我真正想避免的是调整代码以支持单元测试。相反,我想实现类似的功能,例如提到的Java classpath。
答案 0 :(得分:0)
请尝试此代码。
的script.js
var config;
if(process.env.dev===true){
config = require('./config/dev/config.js');
}
if(process.env.prod===true){
config = require('./config/prod/config.js');
}
exports.getFileName = function() {
return config.fileName; // returns 'code.txt'
}
test.js
//set the environment here
process.env.dev = true;
var assert = require('assert');
var s = require('./script.js');
describe('Test', function () {
it('should use different config file', function() {
assert.equal('test.txt', s.getFileName());
});
});
答案 1 :(得分:0)
我在网上找不到任何优雅的解决方案,所以我已经实施并发布了我自己的解决方案。 请在此处查看:https://npmjs.org/package/app-config
使用app-config
插件,只有script.js
需要以这种方式进行更改:
var config = require('app-config').app;
exports.getFileName = function() {
return config.fileName; // returns 'code.txt'
}
应用程序需要以这种方式运行,例如
NODE_ENV=dev node script.js
NODE_ENV=unitTest mocha test.js
根据NODE_ENV
环境变量,app-config
插件将加载正确的配置文件集。