typescript - Modstridende typer ved brug af jest sammen med karma, jasmine på Angular


Baggrund

Jeg arbejder på et projekt, der oprindeligt blev lavet som et Angular.js-projekt. Vi migrerer i øjeblikket alting til Angular. Det betyder, at vi har gamle enhedstest for Angular.js, som til sidst vil blive fjernet. For Angular har vi migreret alle tests til Jest.

Problem

Problemet opstår, når man prøver at have både Karma og Jasmine som Jest i projektet. De ældre enhedstest er forbundet med deres egen tsconfig-fil, og disse fungerer fint. Begge biblioteker ser ud til at tilføje de samme funktioner til det globale miljø, og Jest-testene fortsætter af en eller anden grund med at vælge Jasmine-typerne. Hvis jeg fjerner Karma og Jasmine fra projektet, fungerer alle testene bare fint.

Spørgsmål

Hvordan kan jeg udelukke jasmine's typer som expect, når jeg kører jest uden at fjerne karma og jasmine helt fra projektet?

Jeg har prøvet

Jeg har en separat tsconfig.spec-fil til jest-tests, som jeg har refereret i jest.config.js-filen. Her har jeg forsøgt kun at tilføje de ønskede typer. Jeg troede, det kun ville indlæse node_modules/@types/<included>. Men den vil stadig inkludere jasmine.

  "compilerOptions": {
    "types": ["node", "jquery", "jest"],

Jeg har også prøvet at inkludere dem gennem typeRoots, men det giver mig kun flere fejl som: error TS2708: Cannot use namespace 'jest' as a value..

{
  "compilerOptions": {
    "outDir": "../out-tsc/spec",
    "typeRoots": [
      "../node_modules/@types/jest"
      ...
    ],
    "baseUrl": ".",
    "paths": {
      "*": ["./*"]
    },
    "sourceMap": true,
    "declaration": false,
    "downlevelIteration": true,
    "moduleResolution": "node",
    "experimentalDecorators": true,
    "target": "es5",
    "emitDecoratorMetadata": true,
    "esModuleInterop": true,
    "allowJs": true
  },
  "files": ["polyfills.ts"],
  "include": ["./app/**/*.spec.ts"]
}

På en eller anden måde synes jeg ikke at kunne få TypeScript til at ignorere node_modules/@types/jasmine. Enhver hjælp eller vejledning vil blive meget værdsat.

Svar #1

Du kan bruge jest-without-globals til eksplicit at importere describe, expect, it og test, hvilket overskriver de globale versioner af disse symboler, som ellers ville blive løst fra Jasmine.

Relaterede artikler