Лучший метод для обработки асинхронных вызовов Firebase в Nightwatch.js? - PullRequest
0 голосов
/ 16 мая 2018

У меня есть тест Nightwatch, который создает нового пользователя, а затем ищет данные пользователя в Firebase. Проблема в том, что тесты происходят асинхронно, потому что код Firebase использует обещания, поэтому я отложил запрос Firebase с помощью setTimeOut, чтобы дать время теста для создания пользователя, прежде чем я его посмотрю. Код 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 голосов
/ 20 июня 2018

Я понял это: поскольку 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)
    })
  }
};
...