Каков правильный способ написания тестов 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
, похоже, не помогает.
Ответы
Ответ 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).