50
votes

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 en conjonction avec Jest, mes spécifications échoueraient avec des messages d'erreur tels que:

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

Les types sont déjà installés.

J'utilise:

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`.

jest --forceExit --coverage --verbose tests en utilisant jest --forceExit --coverage --verbose


0 commentaires

13 Réponses :


22
votes

Après avoir tsconfig.json le tsconfig.json pendant un moment, j'ai finalement compris que commenter les "types": [], fonctionnera.

échec de la configuration (avant)

// tsconfig.json
{
  "compilerOptions": {
    // "types": []
  }
}

configuration de travail

// tsconfig.json
{
  "compilerOptions": {
    "types": []
  }
}


4 commentaires

Ou ajouter est aux types: "types": ["jest"]


@Madeo avez-vous ajouté le @types/jest aux dépendances de développement dans votre package.json?


Oui, j'ai ajouté cela, et je les ai importés dans mon fichier de test. J'ai joué avec les excludes et les types , mais rien. Tout fonctionne bien, juste cette plainte du compilateur = (


Travaux en novembre 2019



41
votes

J'utilise VSCode comme IDE et dans mon projet Angular, j'ai dû commenter / supprimer des types dans tsconfig.json et ajouter des plaisanteries dans les types à tsconfig.spec.json.

tsconfig.json

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

tsconfig.spec.json

{
  "compilerOptions": {
    // "types": []
  }
}


1 commentaires

J'ai également dû supprimer "typeRoots" de mon fichier tsconfig, qui remplaçait apparemment "types".



3
votes

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 traqueur de problème de plaisanterie ou SO ou où n'a pas aidé. Juste un bug fou corrigé par une solution de contournement folle 🤷‍♂️

Oui, et j'ai ajouté les derniers jest , ts-jest et @types/jest à package.json bien sûr


2 commentaires

Si vous voulez importer quelque chose, il est préférable d'importer les fonctions «décrire» et «it» ou tout ce dont vous avez besoin de jest


J'ai utilisé mocha mais j'ai eu le même problème, VSCode se plaignait de describe et des autres types manquants même avec .eslintrc env avec mocha. L'ajout d'un fichier dans mon répertoire de test en ne faisant import { describe, before, it } from 'mocha' résolu l'erreur dans VSCode.



9
votes

Vous devez inclure dans tsconfig.json votre chemin de test.

Exemple: supposons que vous ayez nommé votre chemin vers tests/ et que vous le placiez dans le répertoire racine du projet, vous devez spécifier le paramètre "include" de tsconfig pour rechercher les fichiers testes:

  1. Accédez à: tsconfig.json
  2. Ajouter:
"include": [
    "tests/*.<file_test_extension>",
],
  • <file_test_extension>: ts | js | etc.

J'espère aider


1 commentaires

mais cela commencera à copier les fichiers de test dans le dossier lib qui sera déployé



16
votes

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

  1. Assurez-vous que @types/jest et @types/node installés.
  2. Assurez-vous que vous avez lié ces types dans tsconfig.json afin que: types: ["jest", "node"]
  3. Assurez-vous que vos tests ou le répertoire tests ne sont pas exclus de la configuration tsconfig.json dans la propriété excluded .

Si vous transpilez vers JS, vous aurez besoin d'un tsconfig.json séparé dans vos tests qui inclut vos fichiers de test ainsi que les options et fichiers du compilateur nécessaires pour créer le contexte approprié.


5 commentaires

Ce que j'ai trouvé, c'est que si je supprime, " * / .spec.ts" de la propriété "exclue" dans tsconfig.json, le soulignement rouge dans VS Code disparaît pour "décrire" dans les fichiers .spec, mais ces fichiers sont maintenant sortie dans le dossier / lib dans le cadre du package. Il semble qu'il n'y ait aucun moyen d'exclure les fichiers .spec du paquet, mais de les inclure partiellement pour que les erreurs de «description» disparaissent?


@Ross vient de modifier mon message


Pour moi, j'avais également besoin d'ajouter le répertoire "test /" à la section "include" de mon tsconfig.json et cela a fonctionné. Cette réponse m'a donné l'idée que cela pourrait être quelque chose qui doit être fait.


Je pense que c'est la réponse la plus complète, cependant, il est très important de redémarrer VSCode. Dans mon cas, je n'ai pas redémarré ce qui m'a fait perdre beaucoup de temps.


@Janiwu Chen, dans mon cas il suffisait de fermer et rouvrir le fichier sans redémarrer (VSCode chez Ubuntu) mais bon conseil !.



5
votes

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

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

qui étend celui du dossier racine:

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

De cette façon, les fichiers de test sont toujours exclus de la version publique, tout en partageant toutes les options communes.


0 commentaires

12
votes

Vous devez importer jest dans votre fichier de test:

{
  "compileOnSave": true,
  "include": [
    "src"
  ],  // remove this comma
}

Une autre façon de résoudre consiste à ajouter dans votre fichier tsconfig.json:

   "compilerOptions": {
     "types": [ "node", "jest" ],
     "moduleResolution": "node"
   }

Si vous utilisez tslint, le problème peut être une virgule inutile à la fin de votre tsconfig.json, par exemple:

import 'jest';


1 commentaires

Ouais, une virgule supplémentaire était mon problème. Merci



1
votes

J'utilise mocha , chai et chai-http pour tester un projet Node Express.js. Je n'utilisais pas de types dans compilerOptions plus tôt, mais l'ajout du paramètre ci-dessous dans tsconfig.json fait fonctionner pour moi:

{
  "compilerOptions": {
    // ...rest of my settings
    "types": ["mocha", "chai", "chai-http"]
  }
}


0 commentaires

9
votes

La seule façon dont j'ai pu résoudre ce problème était d'ajouter le dossier tests/ à "include" dans le fichier tsconfig.json :

"env": {
  "es2020": true,
  "node": true,
  "jest": true
}

Pour ceux qui se plaignent également d' eslint , vous devez ajouter jest à votre fichier .eslintrc.json :

"include": [
  "src/**/*.ts",
  "tests/*.ts"
] 


0 commentaires

1
votes

Vous devez inclure dans tsconfig.json votre chemin de test.

J'ai résolu le problème en ayant un tsconfig.json et un tsconfig.build.json dans la racine de mon projet. tsconfig.json contient toutes les options, y compris

"scripts": {
  "clean": "rm -rf dist",
  "build": "npm run clean && tsc --build tsconfig.prod.json,
  ...
}

tsconfig.build.json :

{
  "extends": "./tsconfig.json",
  "include": ["src/**/*"]
}

Puis dans package.json (script propre facultatif):

"include": ["src/**/*", "test/**/*"],

0 commentaires

5
votes

Aucune des solutions ci-dessus n'a résolu mon problème. J'ai dû ajouter "@types/jest" au tableau des types dans le fichier tsconfig.json .


1 commentaires

Merci, cela fonctionne pour mon projet qui utilise typescript et typescript-eslint



0
votes

J'ai installé ts-jest avec npm i -D ts-jest et l'erreur a disparu


0 commentaires

0
votes

@Greg Woz est la réponse la plus complète, pour mon cas, pour une raison quelconque, le fichier tsconfig.json initial contient "exclude": ["node_modules", "**/__tests__/*"] , qui est la cause première. Après avoir supprimé "**/__tests__/*" . Et assurez-vous qu'il inclut également: "types": ["jest"] . Ça marche.

Il est également important de redémarrer Vscode après les modifications de configuration. Cela me fait perdre des heures à essayer toutes les différentes méthodes sans le redémarrer.


0 commentaires