mocha和supertest.agent没有按预期工作

时间:2014-06-01 12:38:43

标签: express mocha supertest node-async superagent

我正在尝试编写一些我需要首先进行身份验证的测试。如果我在“before()”中发出多个请求,我会拒绝连接。如果我在“before()”和“it()”之间拆分它可行,但我无法实现我想要的。

我想工作的代码:

var agent = request.agent(myExpressApp),
      token;
    before(function(done) {
      async.series([
        function(cb) {
          agent
            .post('/1/auth/login')
            .send({
              email: 'john@smith.com',
              password: 'j0hn_Sm1TH'
            })
            .expect(200)
            .end(cb);
        }, function(cb) {
          agent
            .get('/1/auth/authorize')
            .query({
              response_type: 'token',
              client_id: 'some id',
              redirect_uri: 'http://ignore'
            })
            .expect(302)
            .end(function(err, res) {
              /* console.log(arguments) = { '0': 
                { [Error: connect ECONNREFUSED]
                  code: 'ECONNREFUSED',
                  errno: 'ECONNREFUSED',
                  syscall: 'connect' } }*/
              if (err) return cb(err);
              cb();
            });
        }
      ], done);
    });
    it('some authenticated task', function(done) {
      // do something else
      done();
    });

正在运行的代码:

var agent = request.agent(myExpressApp),
      token;
    before(function(done) {
      async.series([
        function(cb) {
          agent
            .post('/1/auth/login')
            .send({
              email: 'john@smith.com',
              password: 'j0hn_Sm1TH'
            })
            .expect(200)
            .end(cb);
        }, function(cb) {
          cb();
        }
      ], done);
    });
    it('some authenticated task', function(done) {
      agent
        .get('/1/auth/authorize')
        .query({
          response_type: 'token',
          client_id: 'some id',
          redirect_uri: 'http://ignore'
        })
        .expect(302)
        .end(function(err, res) {
          if (err) return done(err);
          done();
        });
    });

1 个答案:

答案 0 :(得分:0)

您遇到了issue 153 with superagent。令人烦恼和神奇的是,superagent会查看传递给它的回调函数的arity。如果声明函数接受2个参数,则superagent符合(error, result)的节点约定,但是,如果回调函数看起来像是期望任何其他数量的参数(在使用async.js的情况下为零),它调用函数只是callback(res),我猜TJ认为它对浏览器很好,但对于节点来说它完全违反惯例。

有问题的代码行是here