javascript - 在 Nightwatch.js 中处理异步 Firebase 调用的最佳方法?
问题描述
我有一个 Nightwatch 测试,它创建一个新用户,然后在 Firebase 中查找用户的数据。问题是,测试是异步发生的,因为 Firebase 代码使用了 Promise,所以我用 setTimeOut 延迟了 Firebase 查询,以便在我查找之前给测试时间来创建用户。Javascript 代码如下所示:
driver.page.landing().navigate()
.waitForPageLoad()
.setValue('@emailField', user.email)
.click('@submitButton')
driver.pause(5000)
setTimeout(()=> {
firebase.getLeadsInfoByEmail(user.email).then(result => {
firebase.exitFirebase()
driver.page.register()
.assert.equal(result.email, user.email)
})
}, 6000)
}
};
我的问题是:是否有另一种编码方式,以便在某些代码已经运行后发生 Firebase 查询?
解决方案
我想通了:由于 Node.js 异步执行语句,您需要使用 Nightwatch Perform 函数作为队列的一部分运行。所以代码看起来像:
driver.page.landing().navigate()
.waitForPageLoad()
.setValue('@emailField', user.email)
.click('@submitButton')
.api.perform(function() {
firebase.getLeadsInfoByEmail(user.email).then(result => {
firebase.exitFirebase()
driver.page.register()
.assert.equal(result.email, user.email)
})
}
};
推荐阅读
- javascript - 将大对象作为纯参数或对象传递
- python - 如何解决“只能将str(不是“FieldFile”)连接到str”
- javascript - 对齐注释器 (Javascript/HTML) - 如何解决与具有相同前缀的变量的混淆
- regex - 以数字开头但以数字结尾的字符串的正则表达式到熊猫数据帧的子集
- c - 通过 libusb_interrupt_transfer 返回的数据值不一致
- swift - 来自 ViewController 的 UINavigation 控制器
- javascript - 而循环故障与div值
- c++ - Brainfuck 解释器在循环方面存在特殊问题
- r - 如何使用 R 的密码库手动输入密钥
- sql - Excel-VBA-Query 有没有办法通过 Refresh.All 来提高 Excel VBA 的速度?