Cypress.io: ожидание результатов команды exec - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь установить некоторые переменные на основе результатов команды cy.exec() для использования позже в скрипте. Например:

cy.exec('some command').then((result) => {
  let json = JSON.parse(result.stdout)
  this.foo = json.foo
})

Как можно дождаться определения this.foo, прежде чем продолжить работу с остальным сценарием? Я попробовал:

cy.exec('some command').as('results')
cy.wait('@results')

Однако this.results не определено после команды cy.wait().

1 Ответ

2 голосов
/ 29 мая 2019

Вам не нужны псевдонимы. Ваш код верен, но вы не можете использовать this внутри () => {}. Вы должны использовать объявление function, чтобы использовать this.

Попробуйте вместо этого:

cy.exec('some command').then(function(result) {
  let json = JSON.parse(result.stdout)
  this.foo = json.foo
})

Обратите внимание, что Cypress является асинхронным. Это означает, что если вы делаете что-то вроде этого:

cy.exec('some command').then(function(result) {
  let json = JSON.parse(result.stdout)
  this.foo = json.foo
})

expect(this.foo).to.eq(expectedStdout)

... ваш тест всегда будет неудачным. this.foo = json.foo будет выполнено после оценки expect(this.foo)....

Если вы хотите использовать this.foo таким образом, просто используйте Обещание, возвращенное cy.exec():

cy.exec('some command').then(result => {
  return JSON.parse(result.stdout)
})
.then(json => {
  // write the rest of your test here
  cy.get('blah').contains(json.something)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...