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')
)をend関数の外側と関数の内側に置くexpect
と、同じ結果が得られます。また、関数呼び出しのバリエーションを試しました。たとえば、呼び出しを削除し、2つの呼び出しの代わりに.type('form')
使用します。.send(user: 'username', password: 'password')
.field()
それが何かを意味する場合、ローカルで実行されているときにアプリにcurl POSTリクエストを送信すると、同じ出力が生成されます(Moved Temporarily. Redirecting to //127.0.0.1:3456/login
)
これは些細な間違いだと思います。アプリケーションコードやテストコードで忘れているかもしれません。
助言がありますか?
編集1:ブラウザの送信ボタンをクリックすると、期待どおりの結果(フラッシュメッセージ)が得られることにも注意してください。
編集2:さらに調査すると、リダイレクト結果の出力が応答本文に表示されMoved Temporarily. Redirecting to ...
ます。これにより、app.jsでアプリをエクスポートする方法に問題があるのではないかと思います。
var express = require('express')
var app = express();
module.exports = app;