Макет встроенных объектов с NightmareJS

1

Я пытаюсь использовать NightmareJS для загрузки страницы, нажмите кнопку, затем сделайте скриншот для тестирования. Обработчик кликов на кнопке запрашивает геолокацию. Это часть того, что я тестирую. Я хочу, чтобы страница отображалась определенным образом, если пользователь предоставляет разрешение на геолокацию и другой способ, если они отклоняются.

Проблема в том, что Nightmare не предоставляет метод для перехвата подсказки разрешения, чтобы принять или отклонить ее. После некоторых исследований я узнал, что Electron просто жестко закодирует это разрешение на "предоставленный", поэтому может даже не быть способ отклонить его.

То, что я хотел бы сделать, это заменить объект Electron navigator.geolocation макетом, который определенным образом отвечает на запрос геолокации.

new Nightmare().goto('https://example.com')
    .evaluate(function () {
        navigator.geolocation = {
            getCurrentPosition(cb) {
                cb({coords: latitude: 42, longitude: -42});
            }
        }
    })
    .click('#locateMe')
    .screenshot()
    .end()
    .then(diffScreenshot)

Однако, когда я пытаюсь это сделать, кажется, что объект navigator.geolocation не изменяется. Есть ли другой способ достичь этой цели?

Теги:
testing
electron
mocking
nightmare

1 ответ

1
Лучший ответ

Я думаю, что это возможно (или должно быть) в обоих проектах, вы можете попробовать изменить:

navigator.geolocation

к

window.navigator.geolocation

Это связано с тем, что большинство оценок вызовов выполняются в чистом контексте или, как я полагаю. Если это не сработает, Navalia может сделать это так, как это справедливо "голый металл", так сказать.

Удачи!

  • 0
    Использование window.navigator, похоже, сработало! Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню