Предотвратить ошибки test/expect/etc is notdefined при использовании Jest

Инфраструктуру тестирования Facebook Jest легко начать использовать, но документация упускает из виду раздражающий аспект: тестовые операторы будут выделены как ошибки любым редактор, который пытается предупредить о неопределённых символах, потому что test, expect и все методы сопоставления не определены.

«WebStorm

Аналогично, попытка запустить тестовый файл напрямую с node завершится ошибкой с ReferenceError: test is not defined.

Какие операторы require/import нужно добавить, чтобы эти ошибки исчезли?


person Dan Dascalescu    schedule 11.06.2017    source источник


Ответы (3)


Узел

Если вы хотите запускать их напрямую через узел, попробуйте require jest и/или jest-runtime. Также попробуйте @types/jest.

Новую информацию об этом см. в Правке 2.

Изменить

@types/jest (jest-DefinitelyTyped) определенно необходим (или только одно решение). Если вы установите его (например, зависимость от разработчиков), ошибки IDE должны исчезнуть. Я только что попробовал это на Webstorm, и это работает.

Изменить 2

Новые сопоставители Jest@20 (например, .resolves и .rejects) по-прежнему не определены в @types/jest. Вы можете отслеживать его статус по ссылкам ниже: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/16645 https://github.com/DefinitelyTyped/DefinitelyTyped/issues/16803

Тем не менее, он должен быть доступен в ближайшее время!

Кроме того, не представляется возможным запустить его напрямую через node. Прошлой ночью я пробовал кучу разных вещей, но лучше всего использовать шутку — она действительно использует Node под капотом, так что я подумал, что это тоже возможно. @thymikee по поводу вашей открытой проблемы на GitHub ясно дал понять, что это не так.

Изменить 3

Новый выпуск (20.0.1) включает новейшие определения Jest.

корпия

это не относится к данной конкретной проблеме, но также помогает

Вы используете что-то вроде ESLint? Если это так, вам понадобится eslint-plugin-jest

Выполните действия, описанные на этой странице: https://www.npmjs.com/package/eslint-plugin-jest, вам в основном нужно добавить его как плагин ESLint и установить глобальные переменные jest в конфигурации ESLint:

{
  "env": {
    "jest/globals": true
  }
}

Если вы планируете поддерживать тесты ES6, вам также понадобятся плагины Babel и babel-jest со следующей конфигурацией jest:

"transform": {
  "^.+\\.js$": "babel-jest"
}

Наконец, для тестов Typescript вам также понадобятся пакеты @types/jest и ts-jest.

person Apidcloud    schedule 11.06.2017
comment
На самом деле я использую WebStorm (ESLint сам по себе, расширяя предустановку google, даже не удосуживается сообщать о неопределенных символах — вы можете иметь bogusfunc(foo) в своем коде, и он не будет сообщать об этом), а WebStorm подчеркивает операторы expect даже после добавления и настройка eslint-plugin-jest. Кроме того, запуск eslint с плагином или без него ничего не говорит о том, что test или expect (не)определены. Не использую TypeScript, только ES6. - person Dan Dascalescu; 11.06.2017
comment
Попробуйте установить @types/jest в любом случае. Это сработало для меня на веб-шторме. Код Visual Studio также указывает на тестовые и ожидаемые определения машинописного текста. - person Apidcloud; 11.06.2017
comment
Или, если вы действительно не хотите, чтобы это было зависимостью разработчика, добавьте его как библиотеку веб-шторма: Файл — Языки — JavaScript — библиотеки — скачать — и под машинописным текстом найдите jest-DefinitelyTyped. - person Apidcloud; 11.06.2017
comment
Добавление этой библиотеки WebStorm исправило test, describe, expect и сопоставители, но rejects по-прежнему подчеркнуто как Unresolved variable . Добавление jest-matchers-DefinitelyTyped тоже не помогло. - person Dan Dascalescu; 11.06.2017
comment
Я столкнулся с этой проблемой на днях при использовании Typescript и обнаружил, что эти новые совпадения Jest@20 все еще не определены в @types/jest. Собираюсь обновить ответ некоторыми ссылками - person Apidcloud; 11.06.2017
comment
Новый выпуск @types/jest (20.0.1) включает новейшие определения Jest. - person Apidcloud; 20.06.2017
comment
Большое спасибо за упоминание eslint-plugin-jest. Хотя инструкции по настройке, относящиеся к env и transform, у меня не сработали, инструкции по настройке vanilla по адресу npmjs.com/package/eslint-plugin-jest сделал. - person Cameron Hudson; 01.02.2020

Я использую VSCode и ESLint, вам нужно установить eslint-plugin-jest

Добавьте информацию о шутке в свой .eslintrc.js

{
  "plugins": ["jest"]
},
"env": {
  "jest/globals": true
}
person onmyway133    schedule 15.03.2018

Достаточно добавить следующую конфигурацию .eslintrc

{"env": 
  {
    "jest": true
  }
}
person Akshay Vijay Jain    schedule 12.12.2019
comment
Идеально и мило :) (с шуткой 24.9.0 и eslint 6.8.0) - person burntsugar; 15.01.2020
comment
Или, если у вас есть eslintConfig, определенный в package.json, добавьте это к настройкам env, также работает - person Junji Zhi; 14.11.2020