Превышено время ожидания 2000 мс. Для асинхронных тестов и хуков убедитесь, что вызывается done (); при возврате обещания убедитесь, что оно разрешено

Я пишу модульные тестовые примеры для тестирования методов user.service.js внутри user.test.js, но я получаю эту ошибку, если количество тестовых случаев увеличивается: «Ошибка: превышено время ожидания 2000 мс. Для асинхронных тестов и перехватчиков убедитесь, что Вызывается done (); при возврате обещания убедитесь, что оно разрешено.

Здесь я прикрепляю плункерную ссылку к минимально необходимым файлам:

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. Итак, когда обещание получило решимость, мы не можем предсказать. И порядок тестовых случаев также мы не можем предсказать, поэтому мы не можем увеличить тайм-аут также для набора тестов или отдельных тестовых случаев. Есть еще несколько тестовых примеров для других сервисов. Итак, есть ли способ исправить эту проблему.


person nilu    schedule 27.12.2017    source источник
comment
отметьте мой ответ как правильный.   -  person Harry Moreno    schedule 25.01.2021


Ответы (2)


Обычно это означает, что тест не вызвал 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();
      });
    });
  });
});

Если вы все еще видите ошибку, вероятно, обратный вызов не вызывается, дважды проверьте функцию async, например. contactService.getAll() выше. Также внимательно прочтите https://mochajs.org/#asynchronous-code.

person Harry Moreno    schedule 30.05.2018

вам нужно передать done callback для каждого случая - решит вашу проблему.

it('creates a user', function(done) {
    var user = {
        id: null,
        name: 'abc',
        email: '[email protected]',
        phoneNo: 8978567438,
        picUrl: 'nilu',
        description: 'SI',
        status: 'active',
        waitingTime: 10,
        rating: 7
    };
    new Promise((resolve, reject) => {
      return userService.register(user, (res) => {
        //log.info('value after insert: ' + JSON.stringify(res));
        //expect(res.id).to.be.greaterThan(0);
        //expect(result.name).to.equal(user.name);
        //userService.delete(res.id, (res) => {});
      }).then((result) => {
        //expect(result.id).to.be.greaterThan(0);
        log.info('user value after insert: ' + JSON.stringify(result));
        //userService.delete(result.id, (result) => {});
        resolve();
      });
    }).then(() => done());
});

почему ты не используешь синон здесь?

если вы не хотите использовать sinon.stub, вам нужно увеличить тайм-аут после

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

У меня есть пример здесь: https://delwar20.wordpress.com/2017/12/29/using-sinon-to-stub-mongoose-calls-and-return-promise/

Надеюсь, это поможет тебе

person Delwar    schedule 03.01.2018
comment
У меня есть пример здесь. Надеюсь, это поможет вам: delwar20.wordpress.com/2017/12/29/ - person Delwar; 03.01.2018