Javascript 在Nightwatch.js中处理异步Firebase调用的最佳方法?
我有一个夜视测试,创建一个新用户,然后在Firebase中查找用户的数据。问题是,测试是异步进行的,因为Firebase代码正在使用承诺,所以我使用setTimeOut延迟Firebase查询,以便在查找之前为创建用户提供测试时间。Javscript代码如下所示:Javascript 在Nightwatch.js中处理异步Firebase调用的最佳方法?,javascript,selenium,firebase,nightwatch.js,Javascript,Selenium,Firebase,Nightwatch.js,我有一个夜视测试,创建一个新用户,然后在Firebase中查找用户的数据。问题是,测试是异步进行的,因为Firebase代码正在使用承诺,所以我使用setTimeOut延迟Firebase查询,以便在查找之前为创建用户提供测试时间。Javscript代码如下所示: driver.page.landing().navigate() .waitForPageLoad() .setValue('@emailField', user.email) .click('@submitB
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)
})
}
};