Тестирование Mocha / супер-тест / ожидаемый MEAN-стек HTTP-запрос задерживается 4 секунды - PullRequest
0 голосов
/ 26 октября 2018

Я тестирую HTTP-запрос в MEAN-Stack с библиотекой Mocha / supertest / Ожидаем, для возврата которой требуется 4 секунды:

it('should return product data', (done) => {
    request(app)
    .get('/P/Product')
    .expect(200)
    .expect((res) => {
        expect(res.body[0]._id).toEqual('123456789')
    })
    .end(done);
});

Функция должна выполнить обратный вызов «done» в конце,после завершения HTTP-запроса.Но я получаю сообщение об ошибке:

1) should return product data:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a
Promise, ensure it resolves. 

Я думаю, что это работает с неотвеченными ожидающими вызовами.Как бы я сделал это с вложенными ожидающими вызовами внутри других ожидающих вызовов, как в примере выше?

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Я получил решение, проблема заключалась в использовании функции стрелки: (done)=>{...}, вместо обычного обратного вызова, она работает следующим образом:

it('should async square a number', function(done) {  
    this.timeout(2005);
    utils.asyncSquare(5, (res) => {
      expect(res).toBe(25).toBeA('number');
      done();
    });
  });

или также работает, если глобальное время ожидания установлено вскрипт тестирования пакета:

"test": "mocha --timeout 3000 **/*.test.js",
0 голосов
/ 26 октября 2018

Может быть, время ответа на запрос слишком велико, что приводит к 2-секундному тайм-ауту Mocha по умолчанию.Возможно, попробуйте cURL на URL-адрес из CLI, чтобы увидеть, какое время вы получите, или увеличьте порог времени теста мокко для теста.

describe('testing', function() {
    // This applies the timeout of 5 seconds to each test.
    this.timeout(5000);

    it('should return product data', function() {
       // This applies a timeout of 5 seconds for this test only
       this.timeout(5000);
       request(app)
           .get('/P/Product')
           .expect(200)
           .expect((res) => {
                expect(res.body[0]._id).toEqual('123456789')
           })
           .end(done);
       });
});

Другой способ - использовать подход обещания.если вы считаете, что цепочка вызовов expect вызывает проблемы с тайм-аутом.

it('should return product data', () => {
   request(app)
   .get('/P/Product')
   .then((res) => {
       expect(res.status).to.equal(200);
       expect(res.body[0]._id).to.equal('123456789');
   })
});
...