我有一个.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
。即使我在require('dotenv').config();
server.js
我该如何克服这个问题,也许我的超级测试代理结构不正确。请指教。
更新:
代替server = app.listen()
,server = require('../server').listen()
按预期工作。
答案 0 :(得分:0)
只需尝试在process.env.MYVAR = 2;
之前致电app = require('../server')
:
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
,但这仍然取决于您的需求。
答案 1 :(得分:0)
我发现使用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