Node.js 摩卡咖啡&x2B;Nodejs+;Heroku.env文件
我有一个用NodeJS编写的REST应用程序在Heroku上运行。我已经为本地开发设置了.env文件,每当我运行foreman在本地为我的应用程序提供服务时,它都可以正常工作。当我将应用程序部署到heroku服务器时,它也可以正常运行 我正试图用Mocha/Supertest/should/assert为我的应用程序编写单元测试。当我通过Mocha运行我的应用程序时,它不会加载.env文件来获取我的环境变量——在我的例子中,是PSQL数据库的URL。因此,我的所有测试都涉及DB I/O超时 我一直在网上搜寻解决方案,但似乎找不到任何有用的 以下是一些示例代码: app.js:Node.js 摩卡咖啡&x2B;Nodejs+;Heroku.env文件,node.js,heroku,mocha.js,heroku-postgres,Node.js,Heroku,Mocha.js,Heroku Postgres,我有一个用NodeJS编写的REST应用程序在Heroku上运行。我已经为本地开发设置了.env文件,每当我运行foreman在本地为我的应用程序提供服务时,它都可以正常工作。当我将应用程序部署到heroku服务器时,它也可以正常运行 我正试图用Mocha/Supertest/should/assert为我的应用程序编写单元测试。当我通过Mocha运行我的应用程序时,它不会加载.env文件来获取我的环境变量——在我的例子中,是PSQL数据库的URL。因此,我的所有测试都涉及DB I/O超时 我一
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);
});
});
});
环境署署长
以及运行mocha测试得到的输出
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)
监听端口:4482
————获取所有用户
․
2传球(2秒)
1失败
1) Get/用户应回答“确定”:
错误:超过2000毫秒的超时时间
反对。(/usr/local/lib/node_modules/mocha/lib/runnable.js:165:14)
在Timer.list.ontimeout(timers.js:101:19)
当我用硬编码的PSQL本地URL替换process.env.DATABASE\u URL
时,测试都通过了。很明显,mocha没有读取.env文件
我也尝试过将env Var传给摩卡,但收效甚微。有人知道一种让Mocha在我的环境变量中读取.env文件的正确方法吗?我不完全确定,但我认为你不能让Mocha读取你的.env文件。这似乎是针对工头的。如果您的环境变量定义是纯KEY=VALUE,那么我相信像env$(cat.env)mocha
这样简单的东西就可以了。否则,您可能必须首先使用sed/perl/etc进行一些预处理。The(由Heroku工程师编写,以便于在开发中使用.env
文件和Procfiles
,就像在Heroku产品中一样)有一个用于此目的的命令:run
foreman运行npm测试
在互联网上搜索了几天之后,以下是对我有用的东西:
>PATH=$(npm-bin):$PATH-env$(cat.env)摩卡咖啡
需要注意的是,PATH=$(npm-bin):$PATH
被使用,因为我的环境无法找到mocha
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)
-include test.env
test:
npm test