Я создаю приложение React Native и пишу свои модульные тесты с использованием Jest.
(Как вы можете видеть из этого вопроса ,) Я пишу функциюкоторый проверяет, есть ли сетевое соединение.
Вот функция (checkNetwork.ts
):
import { NetInfo } from "react-native";
import { NO_NETWORK_CONNECTION } from "../../../../config/constants/errors";
const checkNetwork = (): Promise<boolean | string> =>
new Promise((resolve, reject) => {
NetInfo.isConnected
.fetch()
.then(isConnected => (isConnected ? resolve(true) : reject(NO_NETWORK_CONNECTION)))
.catch(() => reject(NO_NETWORK_CONNECTION));
});
export default checkNetwork;
Теперь я хочу смоделировать эту функцию при тестировании другой функции, которая выполняет вызовы API.
Я создал папку с именем __mocks__
рядом с checkNetwork.ts
внутри checkNetwork/
(см. Структуру папок ниже).В нем я также создал еще один файл с именем checkNetwork.ts
, который содержит макет и выглядит следующим образом:
const checkNetwork = () => new Promise(resolve => resolve(true));
export default checkNetwork;
Функция, использующая эту функцию, выполняет простой запрос на выборку (postRequests.ts
):
import checkNetwork from "../../core/checkNetwork/checkNetwork";
export const postRequestWithoutHeader = (fullUrlRoute: string, body: object) =>
checkNetwork().then(() =>
fetch(fullUrlRoute, {
method: "POST",
body: JSON.stringify(body),
headers: { "Content-Type": "application/json" }
}).then(response =>
response.json().then(json => {
if (!response.ok) {
return Promise.reject(json);
}
return json;
})
)
);
Структура папок выглядит следующим образом:
myreactnativeproject
├── app/
│ ├── services/
│ │ ├── utils/
│ │ │ └── core/
│ │ │ └── checkNetwork/
│ │ │ └── checkNetwork.ts
│ │ ├── serverRequests/
│ │ │ └── POST/
│ │ │ └── postRequests.ts
│ . .
│ . .
│ . .
.
.
.
Затем я создал еще один файл с именем postRequests.test.ts
в POST/
, чтобы написать модульные тесты для postRequests.test.ts
.Теперь я ожидаю, что Jest автоматически использует макет, который возвращает true.Но на самом деле происходит следующее: тест не возвращает NO_NETWORK_CONNECTION
.Как я могу заставить Джеста использовать макет?