Je n'arrive pas à dire à mocha d'exécuter ma suite de tests dans l'environnement de test.
app.js
app.configure('test', function(){
app.set('port', 3002);
});
test/some-test.coffee
app = require('../../app')
process.env.NODE_ENV = 'test'
describe 'some test', ->
it 'should pass', ->
Étant donné que j'ai besoin d'une application, lorsque j'exécute les tests, je m'attends à voir
Express server listening on port 3002
et à la place je vois
Express server listening on port 3000
La définition d'un numéro de port différent dans un bloc de configuration de développement dans app.js donne
Express server listening on port [whatever port I set in development block in app.js]
Je ne peux pas faire exécuter mes tests dans un environnement de test. Aucune suggestion?
Vous devez définir NODE_ENV avant d'exiger app.js
:
process.env.NODE_ENV = 'test'
app = require('../../app')
describe 'some test', ->
it 'should pass', ->
Vous ne pouvez pas modifier le port d'écoute par app.set
. Il n'y a qu'une seule façon de définir le port - passez-le dans la méthode listen
. Vous pouvez faire quelque chose comme ça:
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);
Je prendrais une approche différente de Vadim. En utilisant l'exemple de Vadim, vous pouvez plutôt charger les paramètres d'environnement en fonction de votre process.env.NODE_ENV
valeur. Je sais qu'il y a une autre étape dans mon approche, mais elle est plus propre, extensible et empêchera l'ajout de conditions de test dans votre logique.
Cette approche utilise dotenv , puis définit à la fois un fichier d'environnement default
et test
à la racine de l'application. Ces fichiers vous permettront de reconfigurer les propriétés de votre application sans changer votre JavaScript.
Ajoutez dotenv en tant que dependency
dans votre package.json
fichier puis installez les nouveaux packages dans votre node_modules
dossier:
package.json
{
...
"dependencies": {
...
"dotenv": "0.2.8"
}
}
ligne de commande
$ npm install
Change ton app.js
pour que le port utilise une valeur d'environnement définie à partir du fichier .env chargé.
// 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);
Créez deux fichiers dans la racine de votre dossier, .env
& .env.test
, ajoutez simplement une ligne ci-dessous. Ces fichiers ont des paires clé-valeur simples sur chaque ligne auxquelles on peut accéder en préfixant process.env.
.
. env
port=3000
. test.env
port=3002
À partir de la ligne de commande ou lorsque vous appelez vos tests, je définirais NODE_ENV
:
$ NODE_ENV=test mocha <TEST_FOLDER>/*.js
---------^
Lorsque vous exécutez l'application dans tous les autres cas sans définir NODE_ENV
, les valeurs par défaut .env
le fichier sera chargé dans process.env
.