Cypress.io:等待执行命令的结果

时间:2019-05-28 21:38:09

标签: cypress

我试图根据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 个答案:

答案 0 :(得分:2)

您不需要别名。您的代码正确,但you can't use this inside of a () => {}。您应该使用function声明来使用this

尝试以下方法:

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

请注意,赛普拉斯是异步的。这意味着如果您执行以下操作:

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()返回的Promise:

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)
})