Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 摩卡咖啡&x2B;Nodejs+;Heroku.env文件_Node.js_Heroku_Mocha.js_Heroku Postgres - Fatal编程技术网

Node.js 摩卡咖啡&x2B;Nodejs+;Heroku.env文件

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超时 我一

我有一个用NodeJS编写的REST应用程序在Heroku上运行。我已经为本地开发设置了.env文件,每当我运行foreman在本地为我的应用程序提供服务时,它都可以正常工作。当我将应用程序部署到heroku服务器时,它也可以正常运行

我正试图用Mocha/Supertest/should/assert为我的应用程序编写单元测试。当我通过Mocha运行我的应用程序时,它不会加载.env文件来获取我的环境变量——在我的例子中,是PSQL数据库的URL。因此,我的所有测试都涉及DB 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);
        });
    });
});
环境署署长

以及运行
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