0

有人可以向我解释为什么会发生以下情况..

我有一个测试快递路线的代码:

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变量交换,第一个测试将通过,第二个将超时。

这是为什么?

4

1 回答 1

1

因为request对象只能结束一次。第一次使用requested.end(...方法等待结束,requested最终结束。第二次,你永远等待(好吧,直到发生超时),因为requested已经结束了

如果您想在多个测试中重用结果(这似乎是 save 的目的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...
});
于 2014-02-28T11:34:23.593 回答