Я пишу приложение React Native и использую Jest для модульного тестирования своего кода.
Я написал функцию, которая проверяет, есть ли подключение к Интернету. Я знаю, что хочу написать модульные тесты. Я застрял, потому что не могу понять, как имитировать состояние подключения устройства в модульном тесте.
Как бы вы смоделировали, что устройство отключено или подключено к сети в модульном тесте?
Редактировать:
Вот функция:
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;
И я хотел бы протестировать его в своем тесте, чтобы увидеть, правильно ли он разрешается с помощью true, если устройство подключено, и отклоняет со строкой, если запрос не выполняется. Для этого мне нужно смоделировать подключение устройств в моих модульных тестах.





Это довольно просто, просто смоделируйте NetInfo вот так:
import {
NetInfo
} from "react-native";
import checkNetwork from "...";
import {
NO_NETWORK_CONNECTION
} from "...";
jest.mock('react-native', () => ({
NetInfo: {
isConnected: {
fetch: jest.fn()
}
}
}))
test('test offline', async () => {
NetInfo.isConnected.fetch.mockResolvedValueOnce(false)
expect(await checkNetwork()).toBe(NO_NETWORK_CONNECTION)
})
test('test online', async () => {
NetInfo.isConnected.fetch.mockResolvedValueOnce(true)
expect(await checkNetwork()).toBe(true)
})
И еще один последующий вопрос: как мне имитировать эту функцию в других тестах, где я ее использую? Если бы вы ответили на эти вопросы, я был бы очень признателен! ??
Я сам столкнулся с ошибкой машинописного текста и не нашел ничего более разумного, чем (NetInfo.isConnected.fetch as jest.Mock).mockResolvedValueOnce(false).
Чтобы повторно использовать макет, вы можете использовать каталог __mocks__. Проверить jestjs.io/docs/en/manual-mocks#mocking-user-modules
Я пробовал это, но проблема в том, что тест по-прежнему использует немодируемую функцию. Не могли бы вы привести пример, как бы вы это сделали? Я мог только заставить свой другой тест, использующий checkNetwork, работать, высмеивая NetInfo, как в вашем примере. Хотелось бы, чтобы __mocks__ заработал.
Я не уверен, как уместить это в комментарии. Я рекомендую вам создать для этого еще один вопрос о переполнении стека.
Я буду, спасибо за вашу помощь, вы мне так помогаете! Мне просто нужно подождать еще 80 минут, потому что я только что задал это другой вопрос о тестировании в TypeScript.
Написал вопрос по ситуации с __mocks__. Не могли бы вы взглянуть на это? Спасибо! stackoverflow.com/questions/52673113/…
Работает как шарм, большое спасибо! Единственная проблема в том, что, поскольку я использую TypeScript, я получаю предупреждение:
[ts] Property 'mockResolvedValueOnce' does not exist on type '() => Promise<boolean>'.Вы знаете, как это исправить?