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

Каков правильный способ написания тестов Jest, проверенных с помощью Flow?

Я полагаю, что люди обычно используют Flow и Jest (и React) вместе, но Flow, похоже, не знает о глобалях Jest (или Jasmine). Когда я добавляю // @flow к моим тестам, я получаю такие ошибки потока:

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

Я мог бы написать интерфейс потока для Jest/Jasmine, но это кажется длинным и, как будто, я должен что-то пропускать. Процесс Letting Flow node_modules/jest-cli, похоже, не помогает.

4b9b3361

Ответ 1

Несмотря на то, что Jest написан с помощью аннотаций потока, они разбивают типы для версии npm, поэтому нам не нужен babel для ее запуска. К счастью, типы уже находятся в поточном типе, поэтому решение довольно просто (как упоминалось в комментарии):

npm install -g flow-typed

# replace the version with the jest version in your package.json
flow-typed install [email protected]

Хотя мне пришлось добавить эту строку и в мой .eslintrc.json:

{
  "env": {
    "jest": true
  }
}

И дополнительно добавьте его в свой .flowconfig файл следующим образом:

[libs]
flow-typed

Ответ 2

Если вы создали свой проект с помощью приложения create-response-app, вам нужно вручную добавить jest к вашим пакетам. json. В противном случае в строчном порядке не будет устанавливаться требуемое определение типов, потому что приложение create-response-app не добавляет эту зависимость в packages.json.

yarn add --dev jest
flow-typed install

Ответ 3

Я думаю, что declare var jest: any; должен сделать трюк (поместить его либо поверх каждого тестового файла, либо где-нибудь в вашем каталоге потока lib).