web-dev-qa-db-fra.com

Impossible de trouver le nom «décrire». Avez-vous besoin d'installer des définitions de type pour un exécuteur de test?

Lors de l'utilisation de TypeScript avec Jest, mes spécifications échouaient avec des messages d'erreur comme:

test/unit/some.spec.ts:1:1 - error TS2582: Cannot find name 'describe'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
test/unit/some.spec.ts:2:3 - error TS2582: Cannot find name 'it'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.
test/unit/some.spec.ts:3:7 - error TS2304: Cannot find name 'expect'.
test/unit/some.spec.ts:7:1 - error TS2582: Cannot find name 'test'. Do you need to install type definitions for a test runner? Try `npm i @types/jest` or `npm i @types/mocha`.

Les types sont déjà installés.

J'utilise:

    "@types/jest": "^23.3.12",
    "jest": "^23.6.0",
    "ts-jest": "^23.10.5",
    "TypeScript": "^3.1.6"

Je lance des tests en utilisant jest --forceExit --coverage --verbose

22
Ronin

Dans mon cas, le problème était dans un fichier particulier. Je n'avais pas trouvé le problème lui-même, mais il a été résolu en ajoutant import {} from 'jest' aux importations du fichier.

Aucun autre moyen de jest issue tracker ou SO ou où n'a pas aidé. Juste un bug fou corrigé par une solution folle ???? ‍♂️

Oui, et j'ai ajouté la dernière jest, ts-jest et @types/jest à package.json bien sûr

1
Fyodor

Liste de contrôle simple pour résoudre ce problème (pour TypeScript et Jest).

  1. Assurez-vous que vous avez @types/jest et @types/node installée.
  2. Assurez-vous d'avoir lié ces types dans tsconfig.json pour que: types: ["jest", "node"]
  3. Assurez-vous que vous n'avez pas vos tests ou le répertoire de tests exclus from tsconfig.json configuration dans la propriété excluded.
0
Greg Woz

Vous pouvez avoir un tsconfig.json dans le dossier de test __tests__:

{
    "extends": "../tsconfig.json",
    "compilerOptions": {
        "baseUrl": "./",
        "outDir": "../build",
        "noEmit": true,
        "rootDir": "../",
    },
    "exclude": ["node_modules"],
}

qui étend celui du dossier racine:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "moduleResolution": "node",
    "outDir": "./lib",
    "rootDir": "./src",
    "strict": true,
    "noImplicitAny": true,
    "esModuleInterop": true,
  },
  "exclude": ["node_modules", "**/*.test.ts", "__tests__"]
}

De cette façon, vous testez les fichiers toujours exclus de la version publique, mais vous pouvez toujours partager toutes les options courantes.

0
Polor Beer