在 Nightwatch.js 中处理异步 Firebase 调用的最佳方法?
Best method to handle asynchronous Firebase calls in Nightwatch.js?
我有一个创建新用户的 Nightwatch 测试,然后在 Firebase 中查找用户的数据。问题是,测试是异步发生的,因为 Firebase 代码使用的是承诺,所以我用 setTimeOut 延迟了 Firebase 查询,以便在我查找之前提供测试时间来创建用户。 Javscript 代码如下所示:
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)
})
}
};
我有一个创建新用户的 Nightwatch 测试,然后在 Firebase 中查找用户的数据。问题是,测试是异步发生的,因为 Firebase 代码使用的是承诺,所以我用 setTimeOut 延迟了 Firebase 查询,以便在我查找之前提供测试时间来创建用户。 Javscript 代码如下所示:
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)
})
}
};