Запускать тесты мокки в тестовой среде?
Я не могу сказать, что мокка запускает свой тестовый пакет в тестовой среде.
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
и вместо этого я вижу
Express server listening on port 3000
Установка другого номера порта в блоке конфигурации разработки в app.js дает
Express server listening on port [whatever port I set in development block in app.js]
Я не могу заставить свои тесты работать в тестовой среде. Любые предложения?
Ответы
Ответ 1
-
Вам нужно определить NODE_ENV, прежде чем вам понадобится app.js
:
process.env.NODE_ENV = 'test'
app = require('../../app')
describe 'some test', ->
it 'should pass', ->
-
Вы не можете изменить порт прослушивания на app.set
. Есть только один способ установить порт - передать его в метод 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);
Ответ 2
Я бы выбрал другой подход от Вадима. Используя пример Vadim, вы можете вместо этого загрузить настройки среды на основе вашего значения process.env.NODE_ENV
. Я знаю, что в моем подходе есть еще один шаг, но он более чист, расширяем и предотвратит добавление тестовых условностей в вашу логику.
Этот подход использует dotenv, а затем определяет как файл default
, так и test
в корне приложения. Эти файлы позволят вам перенастроить свойства в приложении без изменения вашего JavaScript.
-
Добавьте dotenv как dependency
в ваш файл package.json
, затем установите новые пакеты в папку node_modules
:
package.json
{
...
"dependencies": {
...
"dotenv": "0.2.8"
}
}
командной строки
$ npm install
-
Измените свой 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);
-
Создайте два файла в корне вашей папки, .env
и .env.test
, просто добавьте одну строку ниже. Эти файлы имеют простые пары значений ключа в каждой строке, к которым можно получить доступ, если префикс с process.env.
.
.env
port=3000
.env.test
port=3002
-
Из командной строки или при вызове ваших тестов я бы установил NODE_ENV
:
$ NODE_ENV=test mocha <TEST_FOLDER>/*.js
---------^
При запуске приложения во всех других случаях без установки NODE_ENV
значения в файле .env
по умолчанию будут загружены в process.env
.