Привет! Я пытаюсь написать «простой» тест для проверки изменения состояния компонента класса реакции. В частности, я проверяю, меняются ли состояния широты (широты) и lng (долготы), если Google успешно геокодирует некоторую строку (адрес), которую я отправляю. Вот пример того, что я хочу проверить (i.e. the lat and lng states being set to results[0].geometry.location.lat())
:
getLatLong = (address) => {
const that = this;
var geo = new google.maps.Geocoder;
geo.geocode({'address':address},(results, status) => {
if (status == google.maps.GeocoderStatus.OK) {
that.setState(
{
center: {
lat: results[0].geometry.location.lat(),
lng: results[0].geometry.location.lng(),
},
});
}
});
}
В моем наборе шуток у меня возникают проблемы при написании теста и шпионаже / издевательстве над google.maps.Geocoderпотому что библиотека Google никогда не импортируется. Он прикрепляется с помощью сценария, например:
<script async defer
src=<%="https://maps.googleapis.com/maps/api/js?key=#{Rails.application.config.google_api_key}&callback=initMap"%>>
</script>
Точно так же, как это подтверждено, код работает как задумано после ручного тестирования, но я получаю ошибки в моем наборе тестов, когда пытаюсь шпионить вот так:
let geocoderSpy = jest.spyOn(google.maps, 'Geocoder');
Я получаю такую ошибку:
● EventMap › getLatLong works as intended by getting coordinates of valid locations › calls the geocoder function
ReferenceError: google is not defined
34 | let geocoder;
35 | beforeEach(() => {
> 36 | let geocoderSpy = jest.spyOn(google.maps, 'Geocoder');
| ^
37 | geocoder = jest.createSpy('Geocoder', ['geocode']);
38 | geocoderSpy.and.returnValue(geocoder);
39 | });
at Object.google (app/javascript/__tests__/EventPage/EventMap.test.jsx:36:42)
Итак, я решил эту проблему и обнаружил этот переполнение стекаpost и этот ответ, который утверждал, что решил эту проблему, добавив что-то вроде jest в файл package.json ...
"globals": { "google": { } }
Это также не решило мою проблему. Я думаю, что решение состоит в том, чтобы как-то выяснить, как импортировать Google, но не совсем уверен, как это сделать .... Если кто-то может мне помочь, это будет очень признательно. Я хотел бы научиться тестировать что-то подобное. Заранее большое спасибо. Остин