使用Nightwatch-是否可以将测试变量粘贴到beforeEach?

时间:2018-06-22 12:41:32

标签: javascript nightwatch.js

我有一个beforeEach函数可以创建一个预订,以便我的测试可以批准它。效果很好,但是我想对每种不同的预订进行测试,例如,来自美国和澳大利亚的预订。

这是我的代码现在的样子(简化示例)

module.exports = {
  beforeEach: async function (browser, done) {
    const bookingId = await createBooking('US') //assume this exists and creates the booking based on passed in country
    browser.globals.currentBookingId = bookingId
    done()
  },
  'User can approve a US booking': function (browser) {
    const bookingId = browser.globals.currentBookingId

    const bookingPage = browser.page['bookings']()

    bookingPage.navigate(bookingId)

    //approve booking

    browser.end()
  }
}

问题是,是否要添加另一个测试,用户可以批准非公开预订,有什么方法可以将重用代码分别与不同的输入变量一起使用?

还有什么方法可以从beforeEach中返回bookingId?我不确定是否将其设置为全局变量是最好的方法。

最初我不是在使用beforeEach,而是将createBooking步骤放入测试本身,但它是异步的,似乎不允许使用测试功能?

1 个答案:

答案 0 :(得分:0)

好吧,我考虑了一个可能的解决方案。我可以在before函数中开始设置所有预订,即

module.exports = {
  before: async function (browser, done) {
    const countries = ["US", "AU"]

    for (let country of countries){
      browser.globals.bookingIds[country] = await createBooking(country)
    }

    done()
  },
  'User can approve a US booking': function (browser) {
    const bookingId = browser.globals.bookingIds.US

    const bookingPage = browser.page['bookings']()

    bookingPage.navigate(bookingId)

    //approve booking

    browser.end()
  },
   'User can approve a AU booking': function (browser) {
    const bookingId = browser.globals.bookingIds.AU

    const bookingPage = browser.page['bookings']()

    bookingPage.navigate(bookingId)

    //approve booking

    browser.end()
  }
}