我有一个API类:

import axios from 'axios';

export default class API {
  constructor(axiosConfig) {
    this.instance = axios.create({ ...axiosConfig });
  }

  async getSomeData(params) => {
    let result = await this.instance.get('some_data_endpoint', { params: params });
    return result.data;
  }
}

以及一个组件,它首先构造API类,然后调用useEffect挂钩中提供的终结点:

import React, { useEffect, useState } from "react";
import { API } from './API';
import { axiosConfig } from './constants'

const SomeComponent = () => {
  const apiInstance = new API(axiosConfig);
  const [someData, setSomeData] = useState([]);

  useEffect(() => {
    apiInstance.getSomeData({ some_param: 'some_param_value' }).then(data => {
      setSomeData(data);
    })
  }, [])
}

下面是Jest 测试:

import "@testing-library/jest-dom";
import { render } from "@testing-library/react";
import SomeComponent from './SomeComponent'
import API from './API';

jest.mock('./API', () => {
  return jest.fn().mockImplementation(() => {
    return {
      getSomeData: () => {
        return []
      }
    }
  })
});

describe('SomeComponent', () => {
  beforeEach(() => {
    render(<SomeComponent />);
  });

  it('does some work', () => {
    // do assertions 
  })
})

我面临的问题是API会被模拟,但当我try 运行上面的测试时,模拟实现中的方法并没有在模拟中定义.这会导致API.getSomeData is not a function错误.

希望寻找任何我可能遗漏的关于Jest 嘲弄如何在上面的代码中工作的东西.

推荐答案

对于遇到这种情况并使用创建-react -应用程序框架的任何人来说,我的问题原来是在JEST的默认CRA配置中.默认情况下,CRA会在测试运行之前重置所有JEST模拟.要禁用此重置,您可以在项目的Package.json中的jest下添加一些配置:

"jest": {
    "resetMocks": false
}

Reactjs相关问答推荐

呈现组件元素(MAP)中的问题

避风港访问端口以包含Reaction应用程序

如何在关闭和打开此 Select 输入时应用旋转效果?

两条react 路由的行为不同.有没有人能解释一下,我已经找了好几天了

防止在Reaction中卸载

如何处理具有REACTION-REDUX状态的Nextjs路由警卫

在新屏幕上显示照片时出现问题-react

Next.js Next-Auth登录函数重定向到http://localhost:3000/api/auth/error

Reaction路由DOM v6不包含上下文(Supabase)

Reaction路由-如何在布局路由内呈现&q;/:id&q;路由

使用Next.js和Next-intl重写区域设置

在 golang 服务器中刷新或直接 url 路径时响应 404

每次状态更改时都会提交react 表单

使用登录保护 React 中的 SPA 应用程序 - 为什么这种方法不起作用?

我正在通过 API(有效)从 MongoDB 传递数据.可视化但我不断收到此 TypeError: Cannot convert undefined or null to object

如何使用 React 更改 Material UI 中 ButtonGroup 的 colored颜色 ?

如何在 React Native 中更新跨屏幕呈现的上下文状态变量?

在 Formik 表单中访问子组件的值

自动重新获取不起作用 - RTK 查询

如何使图标适合 react-bootstrap 中的行元素