Я не могу получить следующий интеграционный тест для передачи в экспресс-проекте, используя mocha, supertest и should (и coffeescript).
Тест
should = require('should')
request = require('supertest')
app = require('../../app')
describe 'authentication', ->
describe 'POST /sessions', ->
describe 'success', (done) ->
it 'displays a flash', (done) ->
request(app)
.post('/sessions')
.type('form')
.field('user', 'username')
.field('password', 'password')
.end (err, res) ->
res.text.should.include('logged in')
done()
Соответствующий код приложения
app.post '/sessions', (req, res) ->
req.flash 'info', "You are now logged in as #{req.body.user}"
res.redirect '/login'
Отказ
1) authentication POST /sessions success displays a flash:
AssertionError: expected 'Moved Temporarily. Redirecting to //127.0.0.1:3456/login' to include 'logged in'
Очевидно, что код приложения ничего полезного не делает. Я просто пытаюсь пройти тест.
Полагая математическое ожидание (res.text.should.include('logged in')
) вне функции конца и внутри функции expect
, получаются те же результаты. Я также попробовал вариант вызовов функций, например, удаление вызова .type('form')
и использование .send(user: 'username', password: 'password')
вместо двух вызовов .field()
.
Если это что-то значит, отправка запроса POST-запроса в приложение, когда он выполняется локально, дает тот же результат (Moved Temporarily. Redirecting to //127.0.0.1:3456/login
)
У меня такое чувство, что это тривиальная ошибка. Возможно, что-то я забыл в коде приложения или тестовом коде.
Любые предложения?
EDIT 1: Также стоит отметить, что при нажатии кнопки отправки в браузере я получаю ожидаемые результаты (флэш-сообщение).
РЕДАКТИРОВАТЬ 2: Дальнейшее исследование показывает результат любых результатов перенаправления в тело ответа Moved Temporarily. Redirecting to ...
. Это заставляет меня задаться вопросом, есть ли проблема в том, как я экспортирую приложение в app.js.
var express = require('express')
var app = express();
module.exports = app;