web-dev-qa-db-fra.com

Quelle est la bonne façon d'écrire des tests Jest vérifiés avec Flow?

J'imagine que les gens utilisent couramment Flow et Jest (et React) ensemble, mais Flow ne semble pas connaître les globaux Jest (ou Jasmine). Lorsque j'ajoute // @flow à mes tests, j'obtiens des erreurs de flux comme ceci:

src/__tests__/Thing-test.js:3
  3: jest.unmock('../Thing')
     ^^^^ identifier `jest`. Could not resolve name

src/__tests__/Thing-test.js:7
  7: describe('Thing', () => {
     ^^^^^^^^ identifier `describe`. Could not resolve name

src/__tests__/Thing-test.js:8
  8:   it('does stuff', () => {
       ^^ identifier `it`. Could not resolve name

Je pourrais écrire une interface Flow pour Jest/Jasmine, mais cela semble long et comme je dois manquer quelque chose. Laisser le processus de flux node_modules/jest-cli ne semble pas aider.

44
Trevor Robinson

Bien que Jest soit écrit avec des annotations de flux, ils suppriment les types pour la version npm, nous n'avons donc pas besoin de babel pour l'exécuter. Heureusement, les types sont déjà dans type de flux donc la solution est assez facile (comme mentionné dans le commentaire):

npm install -g flow-typed

flow-typed install [email protected] # <-- replace the version with the latest

Bien que je devais également ajouter cette ligne à mon .eslintrc.json:

{
  "env": {
    "jest": true
  }
}
32
Kutyel

La réponse acceptée ne fonctionne pas si vous utilisez Create-React-App . Voici comment mettre en place une plaisanterie avec CRA:

1.Installez le flux dans votre projet

Si vous utilisez create-reat-app, ici est un guide pour cette étape.

yarn add -D flow-bin
yarn run flow init

2. Installer les types de flux Jest

npx flow-typed install jest@22 // maybe you need a different version

(Vous pouvez utiliser npx jest -v pour vérifier votre version plaisanterie si vous utilisez create-react-app.)

3. Enregistrez le type de flux dans config

(Mise à jour: comme le souligne @Black dans les commentaires, cette étape n'est peut-être même pas nécessaire)

Dans votre .flowconfig, ajoutez le type de flux à la section libs.

...
[libs]
flow-typed
...

J'utilise du fil, npm devrait fonctionner de la même façon.

12
Hinrich

Si vous avez créé votre projet avec create-react-app, vous devez ajouter manuellement jest à votre packages.json. Sinon, le type de flux n'installera pas les définitions de type nécessaires car create-react-app n'ajoute pas cette dépendance à packages.json.

yarn add --dev jest
flow-typed install
7
Jan Kühnlein

Je pense declare var jest: any; devrait faire l'affaire (placez-le soit au-dessus de chaque fichier de test, soit quelque part dans votre répertoire lib de flux).

0
Nikita

Vous pouvez également l'exécuter en une seule ligne. Voici:

npm i -D flow-typed && npx flow-typed install jest@"$(npx jest -v)"
0
uloco