TypeScript - Cypress: Tipuri care se ciocnesc cu Jest


Mă confrunt cu problema suprapunerii tipurilor în Cypress și Jest (de exemplu „expect”).

exemplu.spec.ts

expect(value).toBe(0) // Property 'toBe' does not exist on type 'Assertion'.

Am editat tsconfig.json în felul următor, dar nu a rezolvat.

  • Eliminați „cypress” din proprietatea „types”
  • Exclude fișierele de test Jest din tsconfig.json și declară un alt tsconfig
  • Exclude fișierele de testare jest din tsconfig.json și adaugă tsconfig în directorul cypress

Iată tsconfig-ul meu

{
  "compilerOptions": {
    "target": "ES2018",
    "module": "ESNext",
    "moduleResolution": "Node",
    "resolveJsonModule": true,
    "lib": [
      "ESNext",
      "ESNext.AsyncIterable",
      "DOM"
    ],
    "esModuleInterop": true,
    "allowJs": true,
    "sourceMap": true,
    "strict": true,
    "noEmit": true,
    "experimentalDecorators": true,
    "baseUrl": ".",
    "paths": {
      "~/*": [
        "./*"
      ],
      "@/*": [
        "./*"
      ]
    },
    "types": [
      "@nuxt/types",
      "@nuxtjs/axios",
      "@types/node",
      "nuxt-i18n",
      "jest"
    ]
  },
  "exclude": [
    "node_modules",
    ".nuxt",
    "dist"
  ]
}

Răspuns #1

Am rezolvat problema cu următoarele:

./tsconfig.json

{
  "compilerOptions": {
    "isolatedModules": true,
    ...
  },
  "exclude": ["cypress/**/*"]
}

./cypress/tsconfig.json

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "isolatedModules": false
  },
  "include": [
    "../node_modules/cypress"
  ]
}

Răspunsul #2

În cazul meu, a fost suficient să exclud numele fișierului de configurare Cypress în tsconfig.json al proiectului. Nu a fost nevoie să pun flag-ul „isolatedModules”.

Exemplu :

  "exclude": [
    ...
    "cypress.config.ts",
    ...
  ]

Funcționează într-un proiect cu webpack, jest, React Testing Library (cu extensii) și Cypress combinate împreună.

Notă: dacă Webpack-ul tău folosește un tsconfig.json diferit, asigură-te că excluzi fișierul și acolo. Altfel, nu vei vedea nicio eroare în IDE, dar le vei vedea în timpul realizării unei construcții.