Я пытаюсь протестировать компонент vue, отображающий карту Google
Элемент сценария google include находится где-то в родительском компоненте, и компонент, который я пытаюсь проверить, ссылается на него глобально:
const googleInstance = window.google
Мои тревожные звонки прозвучали, когда я увидел, что это глобально, но это код, который мне дали, и мне нужно, чтобы мое покрытие было выше!
Код в компоненте получает экземпляр здесь:
this.map = new googleInstance.maps.Map(mapElement, this.options)
Я получаю много ошибок, начиная с:
TypeError: Cannot read property 'maps' of undefined
Я пытался добавить googleInstance и google к параметру mocks при мелком монтировании оболочки
const wrapper = shallowMount(Map, {
mocks: {
google: {
maps: () => {}
}
}
})
Ни сработало, и я получил тот же ответ:
TypeError: Cannot read property 'maps' of undefined
Я пытался:
global.google = {
maps: () => {}
}
Это тоже не сработало
Вот упрощенная версия компонента карты, которую я пытаюсь протестировать:
<template>
<div>
<div refs="mapLayer" :id="mapName" class="mapLayer" />
</div>
</template>
<script>
const googleGlobal = window.google
export default {
name: 'Map',
props: {
name: {
type: String,
required: true
}
},
mounted () {
this.initMap()
},
methods: {
initMap () {
const mapElement = document.getElementById(this.mapName)
this.map = new googleGlobal.maps.Map(mapElement)
}
}
}
</script>
Код был реорганизован, и ранее экземпляр google пришел через магазин Vuex, и мои тесты работали
Другая моя мысль заключалась в том, чтобы вернуть googleInstance из отдельного файла, который я затем мог бы высмеять с помощью jest, но в конечном итоге это просто перенесло проблему в другой файл, который все еще не проверялся бы
Как можно смоделировать значения в моем компоненте или как можно реорганизовать код для проверки?