如何通过函数仅返回 cy.request 响应的一部分?

Mas*_*oe2 1 javascript typescript cypress

这是其他人在这里提出的问题的后续内容如何通过函数返回 cy.request 的响应

我想创建一个调用 api、处理响应并仅返回响应的一部分的函数。我有下面的代码,其中的代码不起作用。我收到编译器错误 - 类型既不是未定义、void 也不是 null 的函数应该返回一个值。我该如何进行这项工作?

Add(someName) : ItemClass {
    cy.request({
        method: 'POST',
        url: someURL,
        body: {
            name: someName
        }
    }).then(function(response) {
       let result = response.body.find((item) => {return item.id === 123})
       return result; // result is of type ItemClass
    })
}
Run Code Online (Sandbox Code Playgroud)

Dan*_*ham 5

前面链接的问题表明您需要return cy.request(...)语法,但由于您也使用 Typescript,因此您还需要更改返回类型。

cy.request()产生一个泛型Chainable类型,因此返回类型可能是

Add(someName) : Chainable<ItemClass> {
  return cy.request({
    ...
Run Code Online (Sandbox Code Playgroud)

但响应是标准的 javascript 响应类型,item看起来像 an object,因此返回类型是

Add(someName) : Chainable<Object> {
  return cy.request({
    ...
Run Code Online (Sandbox Code Playgroud)

如果您有 的类ItemClass,并且想要返回 的实例ItemClass,则需要将其实例化到.then()回调中。


类型参考

命令类型定义在这里request给出

request<T = any>(url: string, body?: RequestBody): Chainable<Response<T>>
Run Code Online (Sandbox Code Playgroud)