У меня проблемы с покрытием кода, и я не могу понять это.Я использую Google Geocoding API для запроса координат, где ответ возвращается внутри функции обратного вызова.Jest используется для тестирования.
Это тестируемый вызов с обратным вызовом:
const geocoder = new google.maps.Geocoder();
geocoder.geocode({address: address}, (results, status) => {
// want to get coverage in this block
// expected test results are OK and logging shows right results
});
Это тест.Поскольку google.maps по умолчанию недоступен при тестировании, я нашел такое решение:
it('test', () => {
const constructorSpy = spyOn(google.maps, 'Geocoder');
const geocoder = createSpyObj('Geocoder', ['geocode']);
constructorSpy.and.returnValue(geocoder);
geocoder.geocode = jest.fn((adr, callback) => callback(response, 'OK'));
// expected results that are all OK
});
createSpyObj https://stackoverflow.com/a/45319913/1756136:
const createSpyObj = (baseName, methodNames): { [key: string]: Mock<any> } => {
let obj: any = {};
for (let i = 0; i < methodNames.length; i++) {
obj[methodNames[i]] = jest.fn();
}
return obj;
};
И google.maps определен в setupTests.js.Когда тестирование не выполняется, google.maps доступен, когда реагирует на загрузку карты Google
window.google = {
maps: {
Geocoder: {},
GeocoderStatus: {
OK: 'OK'
}
}
};
Есть идеи, на что я могу попробовать или посмотреть?Проблема только в покрытии, ожидаемые результаты в порядке.