我试图根据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()
。
答案 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)
})