使用赛普拉斯打字稿类型

时间:2020-02-18 10:45:40

标签: typescript integration-testing typescript-typings cypress

我正在尝试使用赛普拉斯设置TypeScript。该环境似乎设置良好,但是从赛普拉斯提取类型定义似乎存在问题。

为了解构cy.wait('@graphql').then({request})参数,TypeScript抱怨您必须设置request参数的类型。赛普拉斯似乎没有很多类型导出功能,但是有Cypress.WaitXHRCypress.ObjectLike使我可以破解解决方案。

import Cypress from 'cypress';

type WaitXHR = Cypress.WaitXHR;
type ObjectLike = Cypress.ObjectLike;

describe('Admin Page', () => {
  it('Visits admin page', () => {
    cy.server()
      .route({
        method: 'POST',
        url: 'https://www.example.com/graphql',
      }).as('graphql');

    cy.visit('/');

    cy.wait('@graphql').then((xhr: WaitXHR) => {
      const { request }: { request: ObjectLike} = xhr;
      expect(request.body.operationName).to.equal('initalSetup');
    });
  });

此解决方案似乎可以安抚TypeScript,但感觉不太好。 有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我已经这样做了,虽然我不喜欢使用“any”更整洁。

import Cypress from 'cypress';
type ObjectLike = Cypress.ObjectLike;

interface WaitXHRCustom {
  request: ObjectLike;
  response: ObjectLike;
}

cy.wait(`@${aliasRequest}`).should((xhr: any) => {
  const { request, response } = xhr as WaitXHRCustom;