node.js - 在单元测试期间更改 dotenv 变量

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

我有一个 .env 文件,里面有 MYVAR=1 变量。

服务器.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;

测试服务器.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 测试 之后,我的 MYVAR 没有反射(reflect) server.js 文件,它仍然是 1。即使我在 server.js

中注释掉 require('dotenv').config();

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

更新:

代替 server = app.listen()server = require('../server').listen()
按预期工作。

最佳答案

只需尝试在 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.jsmocha.opts,但这仍然取决于您的需要。

关于node.js - 在单元测试期间更改 dotenv 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51270289/

相关文章:

javascript - 如何将 HTTP 请求映射或关联到 Node.js 中的数据库调用?

node.js - 什么是反向代理以及我为什么要将它与 Node.JS 一起使用?

ios - 使用 Alamofire 进行网络请求的单元测试 iOS 应用程序

javascript - 如何在 expressjs 上调用 ajax 后用 jquery 渲染部分 ejs 模板

node.js - 是否可以在 azure 或 openshift 上仅托管 Node js 代码?

javascript - 如何实现配置文件以替换 node.js Web App 中的文字值

unit-testing - 对没有返回值的类进行单元测试?

c# XXXXX 由于其保护级别而无法访问

javascript - 在 Sails Express js 中,除了异步处理之外,AJAX/AJAJ 的意义何在?

javascript - 修改查询字符串以支持参数