Мокко выдает ошибку отклонения обещания в тесте ожидаемой ошибки. Как это исправить? - PullRequest
0 голосов
/ 12 марта 2020

Я использую Мокко и Чай для юнит-тестов. Мой тестовый пример выглядит следующим образом.

describe('1. Users APIs', () => {
    it('1.1 Get Users', (done) => {
        controller.getCaseDetails(req, res, () => { }).then(data => {
            except(data).to.be.have.property(statusCode, 400);
            done();
        });
    });
});

Если тестовый пример не пройден, я получаю ошибку ниже.

  1) 1. Users APIs.
       1.1 Get Users:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/techjini/Techjini/node-projects/CollectionsApp-NodeJS/src/cases/test/getCases.test.js)
      at listOnTimeout (internal/timers.js:549:17)
      at processTimers (internal/timers.js:492:7)

Чтобы исправить это, я добавил .catch к блоку и done() внутри улова. Тогда тест прошел успешно. как исправить эту проблему.

В соответствии с моим возвратом я понял, что если я добавлю блок catch, тогда ошибка будет обработана, но mocha не получит никаких ошибок утверждения, если я не ошибаюсь.

Я хочу напечатать соответствующее сообщение об ошибке в случае сбоя except.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 12 марта 2020

Необходимо установить тайм-аут для асинхронных c запросов, как показано ниже:

describe('Live Agent', function () {
    //set timeout for this test suit
    this.timeout(25000);
    describe('createRequest', function () {
        it(" Live agent request is created", function (done) {
            supertestAgent
                .post(apiPath + "/createRequest")
                .send({
                    "dialogId": "5e427fc25c790ffa5c727a",
                    "platform": "fb",
                    "endUser": { id: "fsfg" }
                })
                .end(function (err, result) {
                    expect(err).equals(null);
                    expect(result.status).equals(201)
                    done();
                });
        })
    });

В приведенном выше примере кода тайм-аут установлен в верхний контейнер, так что все тестовые примеры ниже, которые наследуют тайм-аут.

this.timeout(25000)

Moacha напрямую печатает ошибку подтверждения, поэтому мы не получаем к ней доступ. Итак, вам нужно добавить больше тестовых случаев, предотвращая ошибку expect.

...