Fee*_*ech 35 mocha.js node.js express supertest
我似乎无法使用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()
Run Code Online (Sandbox Code Playgroud)
相关的应用程序代码
app.post '/sessions', (req, res) ->
req.flash 'info', "You are now logged in as #{req.body.user}"
res.redirect '/login'
Run Code Online (Sandbox Code Playgroud)
失败
1) authentication POST /sessions success displays a flash:
AssertionError: expected 'Moved Temporarily. Redirecting to //127.0.0.1:3456/login' to include 'logged in'
Run Code Online (Sandbox Code Playgroud)
显然,应用程序代码没有做任何有用的事情.我只是想让测试通过.
将expectation(res.text.should.include('logged in'))置于end函数之外且函数内部expect产生相同的结果.我还尝试了一些函数调用,例如删除.type('form')调用,而.send(user: 'username', password: 'password')不是使用两个.field()调用.
如果它意味着什么,在本地运行时向应用程序发送curl POST请求会产生相同的输出(Moved Temporarily. Redirecting to //127.0.0.1:3456/login)
我有一种感觉,这是一个微不足道的错误.可能是我在应用程序代码或测试代码中遗忘的东西.
有什么建议?
编辑1:值得注意的是,当点击浏览器中的提交按钮时,我得到了预期的结果(一条flash消息).
编辑2:进一步调查显示任何重定向的输出结果在Moved Temporarily. Redirecting to ...响应正文中.这让我想知道我在app.js中导出应用程序的方式是否存在问题.
var express = require('express')
var app = express();
module.exports = app;
Run Code Online (Sandbox Code Playgroud)
Fee*_*ech 25
对于遇到此页面的人来说,这个问题的答案非常简单.该Moved Temporarily.响应体就是从supertest返回.有关更多详细信息,请参阅问题
总而言之,我最终做了类似这样的事情.
should = require('should')
request = require('supertest')
app = require('../../app')
describe 'authentication', ->
describe 'POST /sessions', ->
describe 'success', ->
it 'redirects to the right path', (done) ->
request(app)
.post('/sessions')
.send(user: 'username', password: 'password')
.end (err, res) ->
res.header['location'].should.include('/home')
done()
Run Code Online (Sandbox Code Playgroud)
只需检查响应标头location是否符合预期.应使用其他方法测试Flash消息和查看特定的集成测试.
Bla*_*nic 22
这里有内置的断言supertest:
should = require('should')
request = require('supertest')
app = require('../../app')
describe 'authentication', ->
describe 'POST /sessions', ->
describe 'success', ->
it 'redirects to the right path', (done) ->
request(app)
.post('/sessions')
.send(user: 'username', password: 'password')
.expect(302)
.expect('Location', '/home')
.end(done)
Run Code Online (Sandbox Code Playgroud)
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')
.redirects(1)
.end (err, res) ->
res.text.should.include('logged in')
done()
Run Code Online (Sandbox Code Playgroud)
该redirects()会执行重定向,所以你可以做你通常的看法测试。
| 归档时间: |
|
| 查看次数: |
22286 次 |
| 最近记录: |