我似乎无法使用以下集成测试来通过快速项目mocha http://visionmedia.github.com/mocha/, 超级测试 https://github.com/visionmedia/supertest, and should https://github.com/visionmedia/should.js/(和咖啡脚本)。
The test
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'
Failure
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()
calls.
如果这意味着什么,当应用程序在本地运行时向应用程序发送curl POST 请求会产生相同的输出(Moved Temporarily. Redirecting to //127.0.0.1:3456/login
)
我感觉这是一个微不足道的错误。可能我在应用程序代码或测试代码中忘记了一些东西。
有什么建议么?
EDIT 1:还值得注意的是,当单击浏览器中的提交按钮时,我得到了预期的结果(一条闪存消息)。
EDIT 2:进一步调查显示输出any重定向结果在Moved Temporarily. Redirecting to ...
响应体。这让我想知道我在 app.js 中导出应用程序的方式是否存在问题。
var express = require('express')
var app = express();
module.exports = app;