错误:超时超过2000毫秒。对于异步测试和挂钩,请确保“ done()”-如何避免此错误?

时间:2019-01-31 01:41:57

标签: node.js sinon nock sinon-chai

代码:

var processFooBar = function (message, callback) {

  doFooAndBar(message, callback);

};
module.exports.processFooBar = processFooBar;


var doFooAndBar = function (data, callback) {
    async.parallel(
        [
            function (callback) {
                foo(data, function (err, response) {
                    callback(err, response);
                });
            },
            function (callback) {
                bar(data, function (err, response){
                    callback(err, response);
                });
            }
        ],
        function (err, results) {
            callback(err, results);
        }
    );
};
module.exports.doFooBar = doFooBar;

单元测试

describe('Process data', function () {
    var fooStub;

    beforeEach(function (done) {
        done();
    });

    afterEach(function (done) {
        fooStub.restore();
        done();
    });

    it('can process data', function (done) {
        fooStub = sinon.stub(fileName, 'foo').yields(null, null);
        barNockCall();
        app.processFooBar(message,
            function (err, response) {
                nock.isDone().should.be.true;
                nock.cleanAll();
                done();
            }
        }
    });

我遇到以下错误:

can process data:
  Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. 
(/Path/To/Test.js)

如果我在async.parallel中删除foo(),则不会收到错误消息。另外,我猜第一个为fooStubis的sinon.stub没有被调用。

1 个答案:

答案 0 :(得分:0)

您需要增加测试框架的超时时间。它可能具有默认的2000ms超时时间,如果请求的时间超过2秒,则会引发错误。

beforeEach(function (done) {
 this.timeout(10000)
 done();
});

在您的情况下,可以覆盖默认超时。