Tôi có một ứng dụng REST được viết bằng NodeJS đang chạy trên Heroku. Tôi có thiết lập tập tin .env của tôi để phát triển địa phương và hoạt động tốt bất cứ khi nào tôi chạy quản đốc để phục vụ ứng dụng của mình tại địa phương. Ứng dụng này cũng chạy tốt khi triển khai nó vào máy chủ heroku của tôi.Mocha + Nodejs + Tệp Heroku .env
Tôi đang cố viết các bài kiểm tra đơn vị cho ứng dụng của mình bằng Mocha/Supertest/should/assert. Khi tôi chạy ứng dụng của mình thông qua Mocha, nó không tải lên tệp .env để nhận các biến môi trường của tôi - trong trường hợp của tôi, URL cho cơ sở dữ liệu PSQL. Kết quả là, tất cả các thử nghiệm của tôi liên quan đến thời gian chờ DB I/O.
Tôi đã tẩy sạch Internet để tìm giải pháp nhưng dường như tôi không thể tìm thấy bất kỳ điều gì hữu ích.
Dưới đây là một số mẫu mã:
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
Và kết quả tôi nhận được từ đang chạy 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)
Khi tôi thay thế process.env.DATABASE_URL
bằng URL cục bộ PSQL được mã hóa của tôi, tất cả các kiểm tra đều được chuyển. Vì vậy, rõ ràng là tập tin .env không được đọc bởi mocha.
Tôi cũng đã thử truyền các vv env cho Mocha với ít thành công. Có ai biết một cách thích hợp để có Mocha đọc trong môi trường của tôi vars từ tập tin .env?
hoạt động này! Cảm ơn người đàn ông, nhiều đánh giá cao. – Gimli