如何测试使用自定义TypeScript React Hook的组件?

本·史密斯

我目前正在用Typescript编写一个React组件,该组件利用了一个称为useAxiosaxios-hooks钩子。这个钩子在使用中的一个例子是在这里

 export const App = () => {
  const [{ data, loading, error }, refetch] = useAxios(
    "https://api.myjson.com/bins/820fc"
  );

  if (loading) return <p>Loading...</p>;
  if (error) return <p>Error!</p>;

  return (
    <div>
      <button onClick={e => refetch()}>refetch</button>
      <pre>{JSON.stringify(data, null, 2)}</pre>
    </div>
  );
};

const rootElement = document.getElementById("root");
render(<App />, rootElement);

我试图弄清楚如何编写一个可以模拟useAxios挂钩的测试。我尝试创建基础axios组件的模拟,但是无法正常工作:

import React from "react"
import { render } from "@testing-library/react"
import { Test } from "../test"
import useAxios from "axios-hooks"

jest.mock("axios-hooks")
const mockedAxios = useAxios as jest.Mocked<typeof useAxios>

it("Displays loading", () => {
  // How to mock the return values in the following line?
  // mockedAxios.

  const { getByText } = render(<Test />)

  expect(getByText("Loading...")).toBeDefined()
})

我知道我不必模拟axios这是底层的依赖关系,我应该能够模拟useAxios,但是我还是会尝试的。

我意识到这个问题已在SO上被多次提及,但我可以找到针对此特定用例的解决方案。

任何帮助,不胜感激!

本·史密斯

我自己想办法。为了测试自定义钩子,我执行了以下操作:

import * as useAxios from "axios-hooks"
jest.mock("axios-hooks")
const mockedAxios = useAxios as jest.Mocked<typeof useAxios>

it("Displays loading message", async () => {

  // Explicitly define what should be returned
  mockedAxios.default.mockImplementation(() => [
      {
        data: [],
        loading: true,
        error: undefined
      },
      () => undefined
    ])

  const { getByText } = render(<Test />)

  expect(getByText("Loading...")).toBeDefined()
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用自定义挂钩测试React组件

如何使用 TypeScript 键入自定义 React 选择组件?

如何在智能表单组件中使用 react-hook-form 验证自定义输入?

当我在TypeScript中使用React Hook时为什么面对“既不是React函数组件也不是自定义React Hook函数的...”

使用 React Hook 表单的表单显示自定义输入组件字段未定义

如何测试使用Jest导入自定义本机模块的React Native组件?

使用TypeScript在React Native中创建自定义组件

使用 react-hook-form 注册第三方/自定义组件

使用useRef的React自定义Hook首次调用组件加载时会返回null?

在既不是 React 函数组件也不是自定义 React Hook 函数的函数中调用 React Hook “useAxios”

React Hook 在既不是 React 函数组件也不是自定义 React Hook 函数的函数中调用

使用UseState React Hook从子组件更新父组件状态

React Hook "useState" 不能在类组件中调用。React Hooks 必须在 React 函数组件或自定义 React Hook 函数中调用

在进行单元测试时如何调用React组件的自定义方法。我正在使用打字稿

在React中,使用TypeScript,如何使用RefForwardingComponent和forwardRef将ref传递给自定义组件?

在多模块项目中使用自定义React Hook进行Jest测试时出错

Typescript React,如何为将自定义输入组件作为prop的组件提供类型信息?

TypeScript和自定义React Hook Api服务

如何在类组件中使用 React Navigation useNavigation Hook?

如何在要测试的React组件中模拟自定义钩子?

使用Enzyme和Sinon调用了对React组件的测试自定义方法

如何在React Hook中使用自定义的Hook发送请求

在函数“ shoes”中调用React Hook“ useEffect”,该函数既不是React函数组件也不是自定义React Hook

在函数“ onSubmit”中调用React Hook,该函数既不是React函数组件也不是自定义的React Hook函数

在函数“ appBar”中调用React Hook“ useStyles”,该函数既不是React函数组件也不是自定义的React Hook函数

如何在React with Typescript中的类组件中创建类似于setState的自定义钩子

如何将react-hook-form组成组件

如何在React Native中调用类组件中的hook?

React Hook:如何在特定时间更新组件