在Nightwatch.js中处理异步Firebase调用的最佳方法?

时间:2018-05-15 23:57:56

标签: javascript selenium firebase nightwatch.js

我有一个Nightwatch测试,用于创建新用户,然后在Firebase中查找用户的数据。问题是,测试是异步发生的,因为Firebase代码正在使用promises,因此我使用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查询?

1 个答案:

答案 0 :(得分:0)

我发现了这一点:由于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)
    })
  }
};