Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Nightwatch.js中处理异步Firebase调用的最佳方法?_Javascript_Selenium_Firebase_Nightwatch.js - Fatal编程技术网

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

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

我有一个夜视测试,创建一个新用户,然后在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)
    })
  }
};