Подтвердить что ты не робот

Используя метод flowtype для статического контроля тестового кода мокки

У меня есть сложный код Mocha, который я бы хотел статически проверять с помощью FlowType, потому что почему бы и нет?

Ниже приведен минимальный уровень воспроизведения:

/* @flow */

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

Когда я запускаю Flow на этом, Flow действительно обнаруживает проблему с присваиванием string - number, который показывает, что подход работает в некоторой степени.

Однако я также получаю:

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

& hellip; по-видимому, определения тестов Mocha выполняются в среде, где эти функции доступны по всему миру, но при просмотре тестового файла нет ничего, что позволило бы Flow обнаружить это.

Я не уверен, что эти проблемы характерны для Mocha, но я не чувствую, что могу уверенно сформулировать этот вопрос в более широком смысле, поэтому мои вопросы:

  • Как я могу проверить тип потока Mocha, не подавляя каждую строку, содержащую describe или it?
  • - это пример более широкого класса ситуаций, и если да, то каково было бы последнее?
4b9b3361

Ответ 1

Для сторонних библиотек обычно требуются файлы определений, то есть файлы, содержащие всю информацию о типе для данной библиотеки.

В этом случае вам нужен файл определения для мокко, который, к счастью, предоставляется с типом потока.

Установите его с помощью

npm install -g flow-typed

затем запустите

flow-typed install 

Он автоматически установит все доступные файлы определений для ваших зависимостей, включая mocha.

Ответ 2

Вы можете просто объявить переменные потока describe, it.

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

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