Question utiliser flowtype pour vérifier statiquement le code de test moka


J'ai un code Mocha complexe que je voudrais vérifier statiquement avec FlowType parce que pourquoi pas?

Ci-dessous, une repro

/* @flow */

describe('it', function () {
    it('fails', function() {
        const s: number = 'flow spots this error';
    });
});

Lorsque j'exécute Flow sur ce point, Flow détecte en effet le problème de l'affectation de string à number ce qui montre que l'approche fonctionne dans une certaine mesure.

Cependant, je reçois aussi:

test/test.js:4
  4: describe('it', function () {
     ^^^^^^^^ identifier `describe`. Could not resolve name

test/test.js:5
  5:     it('fails', function() {
         ^^ identifier `it`. Could not resolve name

... apparemment les définitions de test de Mocha s'exécutent dans un environnement où ces fonctions sont globalement disponibles, mais en regardant le fichier de test, rien ne permet à Flow de le détecter.

Je ne suis pas sûr que ces problèmes soient spécifiques à Mocha, mais je ne pense pas que je puisse définir la question en termes plus larges, donc mes questions sont les suivantes:

  1. comment puis-je vérifier le type de code de test Moka sans supprimer chaque ligne qui contient describe ou it ?
  2. Est-ce un exemple d'une classe plus large de situations et, si oui, quelles seraient ces dernières?

12
2017-11-17 22:57


origine


Réponses:


Les bibliothèques tierces nécessitent généralement des fichiers de définition, c’est-à-dire des fichiers contenant toutes les informations de type pour une bibliothèque donnée.

Dans ce cas, vous avez besoin d'un fichier de définition pour mocha, qui est heureusement fourni par typé en flux.

Installez-le avec

npm install -g flow-typed

puis courir

flow-typed install 

Il installera automatiquement tous les fichiers de définition disponibles pour vos dépendances, y compris moka.


3
2017-11-18 00:15



Vous pouvez simplement déclarer le flux describe, it variables.

/* @flow */
declare var describe: any;
declare var it: any;

describe('it', function () {
    it('fails', function() {
        const s: number = 'flow spots this error';
    });
});

0
2018-01-10 20:17