超时超过2000毫秒。对于异步测试和挂钩,请确保" done()"叫做;如果返回Promise,请确保它已解决

时间:2017-12-27 05:07:48

标签: node.js mocha chai

我正在编写单元测试用例来测试user.test.js中user.service.js的方法,但是如果测试用例的数量增加,我会收到此错误: "错误:超出2000ms的超时。对于异步测试和挂钩,请确保" done()"叫做;如果返回Promise,请确保它已解决。"

这里我将plunker链接附加到最低要求的文件:

https://plnkr.co/edit/3us5ja?p=info

describe('testing', function() {
describe('random test cases 1', function() {
    it('Get all contacts 1', function() {
            return contactService.getAll((result) => {
                //console.log('all contact data: ' + 
JSON.stringify(result));
            });
    });
    it('Get all contacts 2', function() {
        return contactService.getAll((result) => {
            //console.log('all contact data: ' + JSON.stringify(result));
        });
    });
    it('Get all contacts 3', function() {
        return contactService.getAll((result) => {
            //console.log('all contact data: ' + JSON.stringify(result));
        });
    });
});

describe('random test cases 2', function() {
    it('Get all contacts 21', function() {
        return contactService.getAll((result) => {
            //console.log('all contact data: ' + JSON.stringify(result));
        });
    });
    it('Get all contacts 22', function() {
        return contactService.getAll((result) => {
            //console.log('all contact data: ' + JSON.stringify(result));
        });
    });
    it('Get all contacts23', function() {
        return contactService.getAll((result) => {
            //console.log('all contact data: ' + JSON.stringify(result));
        });
    });
});

describe('random test cases 3', function() {
    it('Get all contacts 31', function() {
        return contactService.getAll((result) => {
            //console.log('all contact data: ' + JSON.stringify(result));
        });
    });
    it('Get all contacts 32', function() {
        return contactService.getAll((result) => {
            //console.log('all contact data: ' + JSON.stringify(result));
        });
    });
    it('Get all contacts 33', function() {
        return contactService.getAll((result) => {
            //console.log('all contact data: ' + JSON.stringify(result));
        });
    });
});
});

这里的一些文件不相关。我尝试过的事情是:

1)所有测试用例的超时超时,并在几个测试用例后面临同样的问题。

2)在每个测试用例中调用done()。

3)在描述的配置超时,它,命令行也在package.json。

我要回复DAO的承诺。因此,当承诺得到解决时,我们无法做出预测。我们也无法预测测试用例的顺序,因此我们也无法为测试套件或单个测试用例增加超时。其他服务的测试用例也很少。那么,有没有办法解决这个问题。

2 个答案:

答案 0 :(得分:1)

这通常意味着测试未在其成功状态中调用done()。您可以致电done()来解决此问题。

describe('testing', () => {
  describe('random test cases 1', () => {
    it('Gets all contacts 1', (done) => {
        return contactService.getAll((result) => {
            done();
        });
    });
    it('Gets all contacts 2', (done) => {
      return contactService.getAll((result) => {
          done();
      });
    });
  });
  describe('random test cases 2', () => {
    it('Gets all contacts 21', (done) => {
      return contactService.getAll((result) => {
          done();
      });
    });
    it('Gets all contacts 22', (done) => {
      return contactService.getAll((result) => {
          done();
      });
    });
  });
});

如果您仍然看到错误,可能是没有调用回调,请重新检查异步函数,例如:上面contactService.getAll()。另请仔细阅读https://mochajs.org/#asynchronous-code

答案 1 :(得分:-1)

你需要为每个案件传递完成回调 - 将解决你的问题。

describe('userDao', function() { 
  this.timeout(3000) 

你为什么不在这里使用sinon?

如果您不想使用sinon.stub,则需要在

之后增加超时
=RIGHT(A1,LEN(A1)-3)+RIGHT(B1,LEN(B1)-3)+RIGHT(C1,LEN(C1)-3)

我在此发布了一个示例:https://delwar20.wordpress.com/2017/12/29/using-sinon-to-stub-mongoose-calls-and-return-promise/

希望它能帮到你