1

在 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.jsscript.js不改变代码的情况下使用不同的配置script.js?我真正要避免的是调整代码以支持单元测试。相反,我想实现类似的功能,例如提到的 Java 类路径。

4

2 回答 2

0

请尝试此代码。

脚本.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'
}

测试.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());
    });
});
于 2013-08-02T07:38:02.073 回答
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

根据环境变量,插件NODE_ENV将加载正确的配置文件集。app-config

于 2013-08-18T17:52:52.223 回答