Типизированные наборы для объекта тела Cypress Request Response? - PullRequest
1 голос
/ 11 февраля 2020

Я новичок в TypeScript, и я переделываю свой набор тестов только для Cypress API, чтобы использовать TypeScript. Моя цель состоит в том, чтобы указать c конечными точками таким образом, чтобы TypeScript знал, что response.body.email - это строка в моем коде и т. Д. c., Так что мне не нужно полагаться на неявный тип 'any':

cy.request('GET', '/foo')
    .then((response) => {
       // TS knows `response.body.email` is a string and `response.body.count` is a number

В идеальном мире это можно было бы уловить непосредственно из определений Сваггера, но я в порядке с более ручными методами.

Возможно ли этого добиться?

В идеале я мог бы интегрироваться с одним из этих двух NPM модулей: https://www.npmjs.com/package/@cypress / schema-tools или https://www.npmjs.com/package/@jc21 / cypress -swagger-validation

Похоже, в моем node_modules/cypress/types/index.d.ts они имеют следующие соответствующие биты:

declare namespace Cypress {
    interface Response {
        allRequestResponses: any[]
        body: any
        duration: number
        headers: { [key: string]: string }
        isOkStatusCode: boolean
        redirectedToUrl: string
        requestHeaders: { [key: string]: string }
        status: number
        statusText: string
    }

    interface Chainable<Subject = any> {
        request(url: string, body?: RequestBody): Chainable<Response>
        request(method: HttpMethod, url: string, body?: RequestBody): Chainable<Response>
        request(options: Partial<RequestOptions>): Chainable<Response>
    }
}
...