为什么我的超级电话不会叫链?

时间:2015-09-15 23:15:09

标签: javascript mocha supertest

它永远不会打到内部调用,所以done()没有被调用,我的摩卡测试超时。这是为什么?

testUsers.forEach(function(loggedInUser) {
  var describeStr;
  if (loggedInUser && loggedInUser.username === 'a') {
    describeStr = 'Tangos API (role: user)';
  }
  else if (loggedInUser && loggedInUser.username === 'admin') {
    describeStr = 'Tangos API (role: admin)';
  }
  else {
    describeStr = 'Tangos API (not logged in)';
  }

  describe(describeStr, function() {
    var id;

    beforeEach(function(done) {
      if (!loggedInUser) {
        return done();
      }

      agent
        .post('/users')
        .send(loggedInUser)
        .end(function(err, res) {
          console.log('err: ', err); // null
          console.log('res.text: ', res.text); // correct
          agent
            .post('/tangos')
            .send(testTango)
            .end(function(err, result) {
              console.log('inner'); // never hits here
              if (err) {
                return done(err);
              }
              return done(); // never hits here, so mocha tests time out
            })
          ;
        })
      ;
    });

使用async也不起作用:

async.series([
  function() {
    agent
      .post('/users')
      .send(loggedInUser)
      .end(function(err, res) {
        console.log('err: ', err); // null
        console.log('res.text: ', res.text); // correct
      })
    ;
  }, function() {
    agent
      .post('/tangos')
      .send(testTango)
      .end(function(err, result) {
        console.log('inner'); // never hits here
      })
    ;
  }
], done);

1 个答案:

答案 0 :(得分:1)

我在这里看到2个可能的问题。首先,您的异步系列缺少每个函数所需的回调。

async.series([
  function(callback) {
    agent
      .post('/users')
      .send(loggedInUser)
      .end(function(err, res) {
        console.log('err: ', err); // null
        console.log('res.text: ', res.text); // correct
        callback(); // Need to call the callback here.
      })
    ;
  }, function(callback) {
    agent
      .post('/tangos')
      .send(testTango)
      .end(function(err, result) {
        console.log('inner'); // never hits here
        callback(); // Need to call callback here too.
      })
    ;
  }
], done);

我用自己的端点运行了这个精确的测试,它运行正常。

第一个代码片段看起来没问题,对我来说效果很好。我冒昧地说,在你有机会完成之前你已经超时了。默认情况下,超时为2000毫秒。 2个API调用在2秒内没有完成是有意义的。要增加超时,只需输入

即可
this.timeout(5000);

在describe块中增加超时值。