reactjs - React jest testing Google Maps Api,Uncaught TypeError : this. autocomplete.addListener 不是函数

标签 reactjs google-maps testing jestjs

我开发了一个 React Google map 自动完成组件。它工作正常,但在 Jest 测试中失败了。我想出了 this.autocomplete.addListener 不是组件本身及其父组件的函数。

大多数有类似问题的线程都是关于 ReferenceError: google is not defined 错误。我通过在 setupTests.js 上定义 google 解决了这个问题

window.google = {
  maps: {
    places: {
      Autocomplete: class {}
    }
  }
};

我想这个问题是不相关的,我试了很多方法也找不到解决办法。测试失败的 ComponentDidMount 方法如下。

componentDidMount() {
    this.autocomplete = new google.maps.places.Autocomplete(
      this.autocompleteInput.current,
      {
        types: ["geocode"],
        componentRestrictions: { country: "uk" },
        fields: ["formatted_address", "geometry"]
      }
    );
    this.autocomplete.addListener("place_changed", this.handlePlaceChanged);
  }

还有,我的测试文件在下面

describe("Autocomplete component", () => {
  it("renders without crashing", () => {
    const div = document.createElement("div");
    ReactDOM.render(<Autocomplete />, div);
    ReactDOM.unmountComponentAtNode(div);
  });
});

我在运行 npm test 时遇到的错误如下。

错误:未捕获 [类型错误:this.autocomplete.addListener 不是函数]

我是 Jest 测试的新手。我感谢任何帮助。谢谢。

最佳答案

我想,我找到了解决方案。在模拟 setupTests.js 时添加 addListener 函数会有所帮助。如果您在 component.test.js 父组件中编写此代码块,则会不断出现相同的错误。所以在 setupTests.js 中编写它解决了这个问题。

window.google = {
  maps: {
    places: {
      Autocomplete: function() {
        return { addListener: jest.fn() };
      },
      event: { trigger: jest.fn() }
    }
  }
};

关于reactjs - React jest testing Google Maps Api,Uncaught TypeError : this. autocomplete.addListener 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57868013/

相关文章:

javascript - 如何强制React组件删除后重新渲染

reactjs - Redux componentDidUpdate 获取之前的状态

c# - 以编程方式确定 *.ts 视频文件是否使用 aes 128 加密

testing - 如何在 PhoneGap 中运行测试

javascript - 获取函数声明上的函数参数类型

javascript - react 中的功能没有按预期工作

ios - 在应用程序中使用 Google map 中的转弯导航

java - 根据 Google Maps API 的缩放级别显示商店

google-maps - Flutter - 谷歌地图 - 删除 POI 层

ruby - Cucumber - 多语言网站的功能