我有一個在Heroku上運行的NodeJS中編寫的REST應用程序。我有我的.env文件設置爲本地開發和工作正常,每當我運行領班在本地服務我的應用程序。當我將它部署到我的heroku服務器時,該應用程序也運行良好。摩卡+ Nodejs + Heroku .env文件
我正在嘗試爲我的應用程序使用Mocha/Supertest/should/assert編寫單元測試。當我通過Mocha運行我的應用程序時,它不會加載.env文件來獲取我的環境變量 - 在我的情況下是PSQL數據庫的URL。因此,我所有的測試都涉及數據庫I/O超時。
我一直在互聯網尋找解決方案,但似乎找不到任何有用的東西。
下面是一些示例代碼:
app.js:
var application_root = __dirname,
express = require("express"),
port = process.env.PORT || 4482;
pg = require('pg').native,
client = new pg.Client(process.env.DATABASE_URL);
// Connect To DB
client.connect();
(...)
app.get('/api', function (req, res) {
res.send('PS API is running');
});
app.get('/', function (req, res) {
res.send('PS API is running');
});
(...)
// Read Users
app.get('/users', function (req,res) {
user.readUsers(res,client);
});
(...)
// Launch server
console.log('Listening on port: '+ port);
app.listen(port);
module.exports = app;
userTest.js
var request = require('supertest');
var assert = require('assert');
var app = require('app.js');
var should = require('should');
describe('Get /', function(){
it('should respond OK',function(done){
request(app)
.get('/')
.end(function(err, res){
res.status.should.equal(200);
done(err);
});
});
});
describe('Get /api', function(){
it('should respond OK',function(done){
request(app)
.get('/api')
.end(function(err, res){
res.status.should.equal(200);
done(err);
});
});
});
// Getting All Users
describe('Get /users', function(){
it('should respond OK',function(done){
request(app)
.get('/users')
.end(function(err, res){
res.status.should.equal(200);
done(err);
});
});
});
.ENV
== LOCAL DB ==
DATABASE_URL=MY_DB_URL
HEROKU_POSTGRESQL_GOLD_URL=MY_DB_URL
PATH=bin:node_modules/.bin:/usr/local/bin:/usr/bin:/bin
和輸出,我從得到運行mocha test
Listening on port: 4482
․․Getting all users
․
2 passing (2 seconds)
1 failing
1) Get /users should respond OK:
Error: timeout of 2000ms exceeded
at Object.<anonymous> (/usr/local/lib/node_modules/mocha/lib/runnable.js:165:14)
at Timer.list.ontimeout (timers.js:101:19)
當我更換process.env.DATABASE_URL
我硬編碼PSQL本地URL,測試全部通過。所以很明顯,.env文件沒有被mocha讀取。
我也嘗試將env vars傳給摩卡,但收效甚微。有沒有人知道一個正確的方法讓摩卡在我的環境變量中讀取.env文件中的變量?
這工作!謝謝你,非常感謝。 – Gimli