Как издеваться над обещанием knex с помощью jest - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь имитировать вызов knex, однако я не могу имитировать все дерево обещаний. Вот мой макет:

jest.mock('../src/db/Client', () => {
  const mKnex = {
    select: jest.fn().mockReturnThis(),
    then: jest.fn((done) => done([list with my data])),
    catch: jest.fn(),
  };
  return jest.fn(() => mKnex);
});

Мне удалось издеваться над select и then, но шутка жалуется, что catch не является функцией, и у меня заканчиваются идеи, как насмехаться это и пройти мой тест. enter image description here

Есть мысли?

Ответы [ 2 ]

1 голос
/ 27 мая 2020

Как сказал @jonrsharpe, вам не нужно издеваться над методами then и catch.

Если вы хотите протестировать успешный сценарий, вы должны использовать метод mockResolvedValue , например: db.select.mockResolvedValue(mResponse), метод then будет выполнен.

Если хотите для проверки сценария сбоя вы должны использовать метод mockRejectedValue , например: db.select. mockRejectedValue(mError), метод catch будет выполнен.

0 голосов
/ 01 июля 2020
jest.mock('../src/db/Client', () => {
  const mKnex = {
     select: jest.fn().mockResolvedValueOnce([{ key: 'blabla' }]).mockReturnThis(),
     catch: jest.fn(),
  };
  return jest.fn(() => mKnex);
});

Изменение вашего кода на это может решить проблему перехвата

...