Gab*_*ido -1 typescript cypress
我对 Cypress 异步行为存在以下问题。我需要创建一个函数方法,该方法将从 URL 中获取参数并返回它,因为稍后它将在不同的地方使用
所以该方法将如下所示:
getParameterFromUrl(): string {
cy.url().then(url => {
cy.log(url);
const parameterFromUrl = url.match(/\d+$/)[0];
cy.log(paramterFromUrl);
// return parameterFromUrl I know this doesnt work because is within a then
}
}
Run Code Online (Sandbox Code Playgroud)
然后在测试的很多部分我将需要获取这个参数并使用它:
const parameter = onMyPageObject.getParameterFromUrl();
cy.log(parameter)
Run Code Online (Sandbox Code Playgroud)
我当然知道这是未定义的。我已经检查了很多可能的解决方案,但任何解决方案都说服了我,因为我必须用 then 外部来解释到处的代码,并在各处匹配正则表达式(我根本不喜欢这一点)。等待只适用于请求,所以我什至可以使用它。
在这种情况下,我可以做什么来改变异步行为以完成像这样简单的事情?
最简单的方法是从您的方法中返回链。
只是.then(... return parameterFromUrl)修改您返回的内容,但您必须返回整个链并将其视为Chainable<string>.
getParameterFromUrl(): Chainer<string> { // use this return type
return cy.url().then(url => {
const parameterFromUrl = url.match(/\d+$/)[0];
return parameterFromUrl // this works, modifies the return value of the chain
}
}
Run Code Online (Sandbox Code Playgroud)
使用方法:
getParameterFromUrl()
.then(parameter => {
cy.log(parameter)
})
// or
getParameterFromUrl().as('parameter')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |