Cypress сохранить содержимое в теле ответа в качестве псевдонима или переменной - PullRequest
0 голосов
/ 10 декабря 2018

Я использую cy.request для создания нового пользователя.Мне нужно получить userID и использовать его для сборки URL.

Например:

function createUser () {
  cy.request({
    method: 'GET',
    url: `/human/sign_in`
  }).then(response => {
    const $ = cheerio.load(response.body)
    const token = $('css to get the token')
    cy.request({
      method: 'POST',
      url: `/signups/brands`,
      form: true,
      body: {
        'authenticity_token': token,
        'name': 'some name',
        'email': 'some email'
      }
    })
  }).then(response => {
    const $ = cheerio.load(response.body)
    const userID = $('css to get userID') // here's the userID
  })
}

Как вернуть это userID и как обратиться к нему в следующемкоды?

describe('some feature', () => {
  it('should do something', () => {
    createUser()
    cy.visit(`/account/${userID}`)      // how to refer to it?
  })
})

Я посмотрел официальные документы.Кажется, as() может сделать какой-то трюк.Но я не смог найти пример использования as() после cy.request().

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Я думаю, что самый простой способ сделать это - добавить несколько операторов return в вашу функцию и использовать then() в вашем тесте.(Спасибо @soccerway за предложение)

function createUser () {
  return cy.request({
    method: 'GET',
    url: `/human/sign_in`
  }).then(response => {
    const $ = cheerio.load(response.body)
    const token = $('css to get the token')
    cy.request({
      method: 'POST',
      url: `/signups/brands`,
      form: true,
      body: {
        'authenticity_token': token,
        'name': 'some name',
        'email': 'some email'
      }
    })
  }).then(response => {
    const $ = cheerio.load(response.body)
    const userID = $('css to get userID') // here's the userID
    return userID;
  })
}

describe('some feature', () => {
  it('should do something', () => {
    createUser().then(userID => {
      cy.visit(`/account/${userID}`)
    })
  })
})
0 голосов
/ 10 декабря 2018

Мы делаем то же самое в наших тестах, используя пользовательскую команду и возвращаем значение оттуда.Пользовательская команда с возвратом автоматически будет ожидать возвращаемого значения, поэтому вам не придется беспокоиться об асинхронных проблемах или хлопотах с псевдонимами.

Cypress.Commands.add("createUser", () {
  return cy.request({
    method: 'GET',
    url: `/human/sign_in`
  }).then(response => {
    const $ = cheerio.load(response.body)
    const token = $('css to get the token')
    cy.request({
      method: 'POST',
      url: `/signups/brands`,
      form: true,
      body: {
        'authenticity_token': token,
        'name': 'some name',
        'email': 'some email'
      }
    })
  }).then(response => {
    const $ = cheerio.load(response.body)
    return $('css to get userID') // here's the userID
  })
})

Тогда ваш тест будет выглядеть так:

describe('some feature', () => {
  it('should do something', () => {
    cy.createUser().then(userId => {
      cy.visit(`/account/${userID}`)
    })
  })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...