服务器端Javascript是否有类似Java类路径的功能?

时间:2013-08-01 19:04:35

标签: javascript node.js unit-testing

在Java中使用JUnit和Maven时,可以为src/mainsrc/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.jstest.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。

2 个答案:

答案 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'
}

应用程序需要以这种方式运行,例如

  1. NODE_ENV=dev node script.js
  2. NODE_ENV=unitTest mocha test.js
  3. 根据NODE_ENV环境变量,app-config插件将加载正确的配置文件集。