错误:超时超过2000毫秒。确保在此测试中调用了done()回调

时间:2018-07-30 02:10:20

标签: node.js mongodb express mocha supertest

我编写了测试代码,并且工作正常,但是在添加了与当前代码无关的其他路由之后,代码被破坏了,尤其是在此时:

  

1)“应该创建新的待办事项”的“之前”钩子:        错误:超时超过2000毫秒。确保此测试中调用了done()回调`。

const todos = [{
  _id: new ObjectID(),
  text: 'first test todo',
  completed: false,
  completedAt: null
}, {
  _id: new ObjectID(),
  text: 'second test todo',
  completed: true,
  completedAt: 333
}];


beforeEach((done) => {
  Todo.remove({}).then(() => {
    return Todo.insertMany(todos);
  }).then((docs) => {
    done();
  });
})
describe('post /todo', () => {
  it('should create new todo', (done) => {
    let text = 'here from supertest';
    request(app)
      .post('/todos')
      .send({
        text
      })
      .expect(200)
      .expect((res) => {
        expect(res.body.text).toBe(text);

      })
      .end((err, res) => {
        if (err) {
          return done(err);
        }

        Todo.find({
            text
          }).then((res) => {
            expect(res.length).toBe(1);
            expect(res[0].text).toBe(text);
            done();
          })
          .catch((e) => {
            done(e);
          });
      });
  });
});

整个项目为in this github libary called TestMongo,您可以在其中检查最后两个提交,这些提交存在我所面临的测试问题,但是当您由邮递员尝试时,它可以正常工作。当一个从末尾恢复到第三次提交时,测试将正常进行。

1 个答案:

答案 0 :(得分:1)

可能我们需要将测试的超时时间增加到更大的数量

beforeEach(function(done) { // dont use arrow function to use this.timeout
  this.timeout(5000); // override default 2000 ms

  Todo.remove({}).then(() => {
    return Todo.insertMany(todos);
  }).then((docs) => {
    done();
  });
})

希望有帮助