Jest - Насмешка над зависимостью компонента React, которая возвращает обещание - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть компонент React со следующей зависимостью:

import { fetchUsers } from '../../api/';

Это служебная функция, которая возвращает Обещание.

При попытке смоделировать это с помощью Jest, я не смог сделать это для каждого теста в течение describe().

Единственный способ, которым я смог смоделировать fetchUsers, - это jest.mock() вверху файла для всего набора тестов.

import x from './x'

jest.mock('../../../../src/api/', () => ({
    fetchUsers: jest.fn(() => Promise.resolve({ users: [] })),
}));

Это не подходит, так как мне нужно проверить .then() (Promise.resolve) и .catch (Promise.reject) в разных тестах. С учетом вышеизложенного я могу проверить только .then()

Кто-нибудь знает, как использовать Jest для насмешки над зависимостью компонента React, который возвращает обещание для каждого теста?

Спасибо

1 Ответ

0 голосов
/ 10 сентября 2018

Jest макет функции могут изменить реализацию:

jest.mock('../../../../src/api/', () => ({
    fetchUsers: jest.fn()
}));

...
const { fetchUsers } = require('../../../../src/api/');
fetchUsers.mockImplementation(() => Promise.resolve({ users: [] }));
// do something that calls fetchUsers

Как объяснено в этого ответа , также возможно смоделировать свойство при импорте * в любое время в зависимости от того, как работают модули ES:

import * as api from '../../../../src/api/';

...
jest.spyOn(api, 'fetchUsers').mockImplementation(() => Promise.resolve({ users: [] }));
// do something that calls fetchUsers
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...