【问题标题】:Change dotenv variables during unit tests在单元测试期间更改 dotenv 变量
【发布时间】:2018-12-18 14:21:22
【问题描述】:

我有一个.env 文件,其中包含MYVAR=1 变量。

server.js

//...   
var app = express();  
//... 
if(app.get("env")==="development"){
  require('dotenv').config();
}
console.log("server------",process.env. MYVAR) //outputs 1
if(process.env.MYVAR==1){
   //do this  
}
if(process.env.MYVAR==2){
   //do this 
}
module.exports = app;

test.server.js

app = require('../server'),
supertest = require('supertest');
require('dotenv').config();

describe('Server TESTS', function () {
    let request = null
    let server = null

    before(function (done) {
        process.env.MYVAR = 2;
        server = app.listen()
        request = supertest.agent(server)
        done()
    });

    after(function (done) {
        console.log("client------",process.env. MYVAR) //outputs 2
        server.close(done)
    });

})

问题: 在我运行mocha test 之后,我的MYVAR 不会反映server.js 文件,它仍然是1。即使我在server.js 中注释掉require('dotenv').config();

我该如何克服这个问题,也许我的超测代理结构不正确。请指教。

更新:

而不是server = app.listen()server = require('../server').listen()
按预期工作。

【问题讨论】:

    标签: node.js unit-testing express mocha.js supertest


    【解决方案1】:

    尝试在app = require('../server')之前调用process.env.MYVAR = 2;

    require('dotenv').config();
    process.env.MYVAR = 2;
    var app = require('../server');
    var supertest = require('supertest');
    

    有更好的方法来处理测试环境变量,您可以创建一个test/mocha.env.js 文件,然后将--require test/mocha.env.js 添加到mocha.opts,但这仍然取决于您的需要。

    【讨论】:

    • 我需要在每个测试用例上动态更改 MYVAR
    • 您确定为此需要环境变量吗?但无论如何,主要问题是您的脚本在初始化 MYVAR 之前正在运行。因此,您可以将使用这些变量的代码包装在一个函数中,并在process.env.MYVAR = 2; 之后调用它
    • server = app.listen() 不是 server = require('../server').listen(),而是按预期工作。
    • 如果要广泛测试这个整洁的小 npm 包,here 也非常有用。
    【解决方案2】:

    我发现使用 process.env 的单元测试代码如果您将其移至单独的模块并在测试期间将其存根出来,会容易得多:

    // config/env.js
    export default process.env;
    
    // server.js
    import env from 'config/env';
    
    if (env.MYVAR === 2) {
      ...
    }
    
    // server.test.js
    // stub config/env.js with library of your choice
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-11
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2022-05-27
      • 2016-04-16
      • 1970-01-01
      相关资源
      最近更新 更多