2012-09-02 19 views
16

मैं परीक्षण वातावरण में अपने परीक्षण सूट को चलाने के लिए मोचा को नहीं बता सकता।परीक्षण पर्यावरण में मोचा परीक्षण चलाएं?

app.js

app.configure('test', function(){ 
    app.set('port', 3002); 
}); 

परीक्षा/some-test.coffee

app = require('../../app') 

process.env.NODE_ENV = 'test' 

describe 'some test', -> 
    it 'should pass', -> 

जब से मैं अनुप्रयोग की आवश्यकता होती है कर रहा हूँ, मैं

देखने की उम्मीद है जब मैं परीक्षण चलाने

Express server listening on port 3002

,210

और इसके बजाय मैं देख रहा हूँ

Express server listening on port 3000

app.js में एक विकास विन्यास ब्लॉक में कोई भिन्न पोर्ट नंबर स्थापना पैदावार

Express server listening on port [whatever port I set in development block in app.js]

मैं अपने परीक्षण एक परीक्षण वातावरण में चलाने के लिए नहीं मिल सकता है । कोई सुझाव?

process.env.NODE_ENV = 'test' 

app = require('../../app') 

describe 'some test', -> 
    it 'should pass', -> 
  • आप app.set द्वारा बंदरगाह सुनने को नहीं बदल सकते:

  • उत्तर

    25
    1. आप NODE_ENV परिभाषित करने के लिए इससे पहले कि आप app.js की आवश्यकता की जरूरत है। पोर्ट सेट करने का केवल एक ही तरीका है - इसे listen विधि में पास करें। आप कुछ इस तरह कर सकते हैं:

      var express = require('express'); 
      var app = express(); 
      
      app.get('/', function(req, res){ 
          res.send('hello world'); 
      }); 
      
      var port = 3000; 
      
      app.configure('test', function(){ 
          port = 3002; 
      }); 
      
      app.listen(port); 
      
    +0

    धन्यवाद, बिंदु # 1 समाधान था। हालांकि, मैं 'app.set ('port', [port]) का उपयोग पर्यावरण कॉन्फ़िगरेशन में कर सकता हूं और 'listen' फ़ंक्शन पर' app.get ('port') 'पास कर सकता हूं। वास्तव में, एक्सप्रेस (3.0.0rc3) ऐप जे जे उत्पन्न करते समय ऐसा करता है। एक बार फिर धन्यवाद! – Feech

    20

    मैं वादिम से एक अलग दृष्टिकोण ले जाएगा। वादिम के उदाहरण का उपयोग करके आप अपने मूल्य के आधार पर पर्यावरण सेटिंग्स लोड कर सकते हैं। मुझे पता है कि मेरे दृष्टिकोण में एक और कदम है, लेकिन यह क्लीनर, एक्स्टेंसिबल है, और आपके तर्क में परीक्षण सशर्तयों को जोड़ने से रोक देगा।

    यह दृष्टिकोण dotenv का उपयोग करता है, फिर अनुप्रयोग की जड़ में default और test पर्यावरण फ़ाइल को परिभाषित करता है। ये फ़ाइलें आपको अपनी जावास्क्रिप्ट को बदले बिना अपने एप्लिकेशन के भीतर गुणों को फिर से कॉन्फ़िगर करने की अनुमति देगी।

    1. एक dependency रूप dotenv जोड़े अपने package.json फ़ाइल में तो अपने node_modules फ़ोल्डर में नए पैकेज इंस्टॉल:

      package.json

      { 
          ... 
          "dependencies": { 
          ... 
          "dotenv": "0.2.8" 
          } 
      } 
      

      कमांड लाइन

      $ npm install 
      
    2. अपना app.js बदलें ताकि पोर्ट लोड की गई .env फ़ाइल से पर्यावरण मान सेट का उपयोग कर रहा हो।

      // Load .env files from root based on the NODE_ENV value 
      require('dotenv').load(); 
      
      var express = require('express'); 
      var app = express(); 
      
      app.get('/', function(req, res){ 
          res.send('hello world'); 
      }); 
      
      var port = process.env.port || 3000; 
      -----------^ 
      
      app.listen(port); 
      
    3. अपने फ़ोल्डर जड़ में दो फ़ाइलों, .env & .env.test बनाएं, बस नीचे एक पंक्ति जोड़ें। इन फ़ाइलों में प्रत्येक पंक्ति पर सरल कुंजी मान जोड़े होते हैं जिन्हें process.env. के साथ उपसर्ग करते समय एक्सेस किया जा सकता है।

      .env

      port=3000 
      

      .env.test

      port=3002 
      
    4. कमांड लाइन से या मैं स्थापित करेगा जब आप अपने परीक्षण फोन NODE_ENV:

      $ NODE_ENV=test mocha <TEST_FOLDER>/*.js 
          ---------^ 
      

    जब आप NODE_ENV सेट किए बिना अन्य सभी मामलों में एप्लिकेशन चलाते हैं, तो डिफ़ॉल्ट .env फ़ाइल में मान process.env में लोड किए जाएंगे।

    +0

    चरण 4 के लिए मैं अपने परीक्षण/फ़ोल्डर में अनुप्रयोग रूट फ़ोल्डर और अन्य .env में उत्पादन .env का उत्पादन कर रहा हूं। फिर मेरी टेस्ट स्क्रिप्ट में मैं स्पष्ट रूप से dotenv को dotenv कस्टम स्थान पथ विधि का उपयोग कर परीक्षण/.env फ़ाइल का उपयोग करने के लिए बताता हूं। –

    +0

    FYI - dotenv 1.0 के रूप में उन्होंने NODE_ENV से मान का उपयोग कर नाम .env फ़ाइलों (.env.test, .env.produduction, ...) को लोड करने की क्षमता को झुकाया। –

    +0

    यह कोई समस्या नहीं है, नवीनतम संस्करण के लिए कुछ (जैसे 'dotenv') की आवश्यकता है। Config ({path: '.env। $ {Process.env.NODE_ENV}', मूक: सत्य}); – Eugene

    संबंधित मुद्दे