首页 > 解决方案 > 在 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 查询?

标签: javascriptseleniumfirebasenightwatch.js

解决方案


我想通了:由于 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)
    })
  }
};

推荐阅读