javascript - 使用 NightmareJS 模拟内置对象

标签 javascript testing mocking electron nightmare

我正在尝试使用 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 对象似乎没有改变。有没有其他方法可以实现这个目标?

最佳答案

我认为这在两个项目中都是可能的(或应该是),您可以尝试更改:

navigator.geolocation

window.navigator.geolocation

这是因为大多数评估调用都是在干净的上下文中运行的,我认为是这样。如果这不起作用,那么 Navalia 可能可以做到,因为它可以说是相当“裸机”。

祝你好运!

关于javascript - 使用 NightmareJS 模拟内置对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45600819/

相关文章:

python - Django:出于测试目的阻止互联网连接

java - 在 Java 中比较 String 和 null 所花费的时间偶尔会出现峰值

java - 将数据文件转换为 JUnit 的 Java 静态类常量

java - 我如何在 JMockit 中期望和验证相同的方法

javascript - es6更新现有父对象的子对象的方法

javascript - 一行中的 JQuery DataTable 单元格单击

javascript - 无法缩放 UIWebView

java - 如何在 Java (jUnit4) 中轻松模拟出静态方法

java - 是否可以使用 EasyMock 创建一个实现多个接口(interface)的模拟对象?

Javascript JSON.parse()