有人可以向我解释为什么会发生以下情况。
我有一个测试快速路线的代码:
request = require 'supertest'
express = require 'express'
app = express()
Authentication = require("#{specDir}/../apps/authentication/routes")
authenticate = new Authentication app
describe 'authentication routes', ->
describe 'GET', ->
describe '/', ->
describe 'user not logged in', ->
requested = request(app).get('/').set('Accept', 'application/json')
describe 'application/json', ->
it 'sends error mesage', (done) ->
request(app).get('/').set('Accept', 'application/json').end (err, res) ->
expect(res.body).to.have.deep.property 'error.message', 'you need to log in'
done()
it 'sends 401 status', (done) ->
request(app).get('/').set('Accept', 'application/json').end (err, res) ->
expect(res.statusCode).to.equal 401
done()
此代码可以正常工作,测试通过。但是,如果我将此request(app).get('/').set('Accept', 'application/json')
与requested
变量交换,则第一个测试将通过,第二个将超时。
为什么?
答案 0 :(得分:1)
因为request
对象只能结束一次。第一次使用requested.end(...
方法等待结束时,requested
最终结束。第二次,你永远等待(好吧,直到发生超时),因为requested
已经已经结束。
如果你想在多个测试中重复使用结果(这似乎是保存requested
的意图),你可以这样做:
describe("user not logged in", function () {
var res;
before(function(done) {
request(app).get('/').set('Accept', 'application/json').end(function (err, r) {
if (err)
throw err;
res = r;
done();
});
});
// You can use `res` from here on...
});