Reactjs React jest测试谷歌地图Api,未捕获类型错误:this.autocomplete.addListener不是函数
我开发了一个谷歌地图自动完成组件。它工作正常,但在玩笑测试中失败。我想到了这个。autocomplete.addListener不是组件本身及其父组件上的函数 大多数有类似问题的线程都与ReferenceError有关:google未定义错误。我通过在setupTests.js上定义google解决了这个问题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 {} } } }; 我想这个问题没有关
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() }
}
}
};
是的,我也有同样的问题。