6

我正在编写一个 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,如果请求失败,则使用字符串拒绝。为此,我需要在单元测试中模拟设备连接。

4

1 回答 1

5

这很简单,只需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)
})
于 2018-10-04T19:14:53.733 回答