Reactjs React jest测试谷歌地图Api,未捕获类型错误:this.autocomplete.addListener不是函数

Reactjs React jest测试谷歌地图Api,未捕获类型错误:this.autocomplete.addListener不是函数,reactjs,google-maps,testing,jestjs,Reactjs,Google Maps,Testing,Jestjs,我开发了一个谷歌地图自动完成组件。它工作正常,但在玩笑测试中失败。我想到了这个。autocomplete.addListener不是组件本身及其父组件上的函数 大多数有类似问题的线程都与ReferenceError有关:google未定义错误。我通过在setupTests.js上定义google解决了这个问题 window.google = { maps: { places: { Autocomplete: class {} } } }; 我想这个问题没有关

我开发了一个谷歌地图自动完成组件。它工作正常,但在玩笑测试中失败。我想到了这个。autocomplete.addListener不是组件本身及其父组件上的函数

大多数有类似问题的线程都与ReferenceError有关:google未定义错误。我通过在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);
  });
});
description(“自动完成组件”,()=>{
它(“渲染而不崩溃”,()=>{
const div=document.createElement(“div”);
ReactDOM.render(,div);
ReactDOM.unmountComponentAtNode(div);
});
});
我运行npm测试时得到的错误如下

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);
  }
错误:未捕获[类型错误:this.autocomplete.addListener不是函数]


我不太会开玩笑。谢谢你的帮助。谢谢。

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

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

是的,我也有同样的问题。