2013-06-27 9 views
10

मेरे पास एक आरईएसटी ऐप है जो नोडोकू पर चल रहे नोडजेएस में लिखा गया है। मेरे पास स्थानीय विकास के लिए मेरा .env फ़ाइल सेटअप है और जब भी मैं अपने ऐप को स्थानीय रूप से सेवा देने के लिए फोरमैन चलाता हूं तो ठीक काम करता है। जब मैं इसे अपने heroku सर्वर पर तैनात करता हूं तो ऐप भी ठीक चलता है।मोचा + नोडजेस + हेरोोक .env फ़ाइल

मैं अपने ऐप के लिए मोचा/सुपरटेस्ट/चाहिए/जोर से यूनिट परीक्षण लिखने की कोशिश कर रहा हूं। जब मैं मोचा के माध्यम से अपना ऐप चलाता हूं, तो यह मेरे पर्यावरण चर प्राप्त करने के लिए .env फ़ाइल लोड नहीं करता है - मेरे मामले में, पीएसक्यूएल डेटाबेस के लिए यूआरएल। नतीजतन, मेरे सभी परीक्षण जिनमें डीबी 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 

और उत्पादन मैं से प्राप्त

यहां कुछ नमूना कोड हैचल रहा है 0

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) 

जब मैं अपने hardcoded psql स्थानीय यूआरएल के साथ process.env.DATABASE_URL, परीक्षण सभी पास की जगह। तो यह स्पष्ट है कि .env फ़ाइल mocha द्वारा नहीं पढ़ा जा रहा है।

मैंने थोड़ी सफलता के साथ मोचा को एनवी वार पास करने का भी प्रयास किया है। क्या किसी को .env फ़ाइल से अपने पर्यावरण के वर्रों में मोचा पढ़ने के उचित तरीके से पता है?

उत्तर

12

foreman gem (एक Heroku इंजीनियर ने लिखा है, यह आसान के रूप में आप Heroku उत्पादन पर होगा विकास में .env फ़ाइलें और Procfiles उपयोग करने के लिए बनाने के लिए) केवल इस उद्देश्य के लिए एक कमांड है: run

foreman run npm test < - या फिर आप अपने परीक्षणों को ट्रिगर करते हैं।

वैकल्पिक रूप से, मेरे वर्तमान परियोजना पर यहाँ हमें क्या करना है:

  • हम एक test.env परीक्षण के लिए उचित पर्यावरण चर और मानों युक्त फ़ाइल, यूनिक्स export प्रारूप में है। तो, हाँ, export DATABASE_URL=MY_DB_URL। प्रारूप पर कुछ भिन्न है, लेकिन यह एक झुंझलाहट हम
  • साथ ठीक हो हम एक Makefile युक्त निम्नलिखित निर्देशों है:
 
-include test.env 

test: 
    npm test 

हम अपने प्रोजेक्ट के लिए परीक्षण चलाने के लिए चाहते हैं हम सिर्फ make test । मेक test.env फ़ाइल लोड करेगा, सभी पर्यावरण चर निर्दिष्ट करें, फिर हमारे लिए npm test चलाएं।

+0

यह काम किया! धन्यवाद आदमी, बहुत सराहना की। – Gimli

2

मुझे पूरी तरह से यकीन नहीं है, लेकिन मुझे नहीं लगता कि आप मोचा को अपनी .env फ़ाइल पढ़ सकते हैं। यह फोरमैन के लिए विशिष्ट प्रतीत होता है। यदि आपकी पर्यावरण परिवर्तनीय परिभाषाएं सादा कुंजी = VALUE हैं, तो मुझे लगता है कि env $(cat .env) mocha जितना सरल होगा। अन्यथा, आपको sed/perl/etc का उपयोग करके पहले कुछ प्रीप्रोकैसिंग करना पड़ सकता है।

0

, दिनों के लिए इंटरनेट खोज के बाद, कुछ है कि मेरे लिए काम कर रहा है:

> PATH=$(npm bin):$PATH env $(cat .env) mocha

उल्लेखनीय यह है कि PATH=$(npm bin):$PATH प्रयोग किया जाता है के रूप में अपने पर्यावरण mocha ढूँढने में सक्षम नहीं किया गया है।