.then 中的返回函数

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 外部来解释到处的代码,并在各处匹配正则表达式(我根本不喜欢这一点)。等待只适用于请求,所以我什至可以使用它。

在这种情况下,我可以做什么来改变异步行为以完成像这样简单的事情?

Zoe*_*Zoe 6

最简单的方法是从您的方法中返回链。

只是.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)