繁体   English   中英

使用反应测试库测试反应谷歌地图 useJsApiLoader

[英]testing react google maps useJsApiLoader using react testing library

我有这个基本组件,但每当我尝试使用 React 测试库对其进行测试时,屏幕上唯一出现的就是带有“正在加载”文本的div 我认为这是因为第一次加载组件时isLoaded可能没有值。

我如何告诉 React 测试库等待isLoadedtrue以便它可以在页面上找到其他元素?

import {
  GoogleMap,
  useJsApiLoader,
  Autocomplete,
  Marker,
} from "@react-google-maps/api";

export const Map = () => {
  const { isLoaded } = useJsApiLoader("apikey");
  return isLoaded ? (
    <form>
      <Autocomplete />
      <GoogleMap>
        <Marker />
      </GoogleMap>
    </form>
  ) : (
    <div>loading</div>
  );
};

export default Map;

您需要在useJsApiLoader中存根isLoaded

像这种方法(我没有测试过这个,你需要根据你的要求调整断言)......

import { screen, render } from "@testing-library/react";
import Map from "./Map";
import * as ReactGoogleMapsApi from "@react-google-maps/api";

describe("Map", () => {
  it("shows loader", () => {
    jest
      .spyOn(ReactGoogleMapsApi, "useJsApiLoader")
      .mockReturnValue({
        isLoaded: false
      });
    render(<Map />);

    expect(screen.getByText(/loading/i)).toBeInDocument();
  });

  it("shows map", () => {
    jest
      .spyOn(ReactGoogleMapsApi, "useJsApiLoader")
      .mockReturnValue({
        isLoaded: true
      });
    render(<Map />);

    expect(screen.getByText(/some map content/i)).toBeInDocument();
  });
});

暂无
暂无

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

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