Как использовать __mocks__ в проекте React Native с Jest - PullRequest
0 голосов
/ 05 октября 2018

Я создаю приложение 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.Как я могу заставить Джеста использовать макет?

...