typescript - Konflikterande typer när man använder jest tillsammans med karma, jasmine på Angular


Bakgrund

Jag arbetar på ett projekt som började som ett Angular.js-projekt. Vi migrerar för närvarande allt till Angular. Detta innebär att vi har äldre enhetstester för Angular.js som så småningom kommer att tas bort. För Angular har vi migrerat alla tester till Jest.

Problem

Problemet uppstår när man försöker ha både Karma och Jasmine som Jest i projektet. De äldre enhetstesterna är kopplade till sin egen tsconfig-fil och dessa fungerar bra. Båda biblioteken verkar lägga till samma funktioner i den globala miljön, och Jest-testerna fortsätter på något sätt att lösas till Jasmine-typer. Om jag tar bort Karma och Jasmine från projektet fungerar alla tester helt utan problem.

Fråga

Hur kan jag utesluta jasmines typer som expect när jag kör jest utan att ta bort karma och jasmine från projektet helt?

Jag har försökt

Jag har en separat tsconfig.spec-fil för jest-testerna som jag har refererat i jest.config.js-filen. I denna har jag försökt lägga till de önskade typerna endast. Jag trodde att detta bara skulle ladda node_modules/@types/<included>. Men det kommer fortfarande att inkludera jasmine.

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

Jag har också försökt inkludera dem genom typeRoots, men detta ger mig bara fler fel 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å något sätt verkar jag inte kunna få TypeScript att ignorera node_modules/@types/jasmine. All hjälp eller tips skulle uppskattas mycket.

Svar #1

Du kan använda jest-without-globals för att uttryckligen importera describe, expect, it och test, och därigenom åsidosätta de globala versionerna av dessa symboler som annars skulle lösas från Jasmine.

Relaterade artiklar