繁体   English   中英

React 单元测试,JEST + axios 模拟问题

[英]React unit testing, JEST + axios mock problem

我在使用 JEST 和 Axios 进行单元测试时遇到问题。 模拟不起作用,我在单元测试期间没有获得数据。 我不知道为什么会这样。 我唯一的想法是,自从我使用 axios.client.get 以来,我以错误的方式嘲笑它?

测试:

jest.mock("axios");
const mockedAxios = axios as jest.Mocked<typeof axios>;

describe("Test of products fetch", () => {
  test("render products", async () => {
    mockedAxios.get.mockResolvedValueOnce({
      title: "product",
      description: "description",
      _id: "123",
      imageData: "",
      price: "15",
    });

    render(
      <ReduxProvider>
        <Products />
      </ReduxProvider>,
    );
    const productsList = await screen.findAllByRole("a");
    expect(productsList).toBeGreaterThan(0);
    expect(productsList).toBeLessThan(10);
  });
});

零件

useEffect(() => {
    const getProducts = async (): Promise<void> => {
      const prods = await getProducts(actualPage);
      setProducts(prods);
    };
    getProducts();
  }, [actualPage]);
<Fragment>
              {products.map((product) => (
                <ProductItem
                  key={product.title}
                  title={product.title}
                  imageData={decodeBase64(product.imageData)}
                  price={product.price}
                  id={product._id}
                />
              ))}
            </Fragment>

api调用

export async function getProducts(pageNum: number): Promise<IProduct[]> {
  const response = await productsClient.get<IProduct[]>(
    `/get-products?page=${pageNum}`,
  );
  const data = response.data;
  return data;
}

错误: const response = await productsClient.get<IProduct[]>( Cannot read properties of undefined (reading 'get')

我有一个类似的问题,并以这种方式实现模拟


mockAxios.get.mockImplementation((url) => {
  switch (url) {
    case '/product/123':
      return Promise.resolve({
      title: "product",
      description: "description",
      _id: "123",
      imageData: "",
      price: "15",
    });
    case '/product/124':
      return Promise.resolve({
      title: "product",
      description: "description",
      _id: "124",
      imageData: "",
      price: "145",
    });
    default:
      return Promise.reject(new Error(`product not found`));
  }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM