From:To:
1−¶ # Jest
2−
3− **Что это.** Инструмент для тестов на JavaScript. Сам проект описывает себя так: «Delightful JavaScript Testing».
4−
5− **Возраст.** Репозиторий на GitHub заведён 10 декабря 2013 года; с 2022 года проект под OpenJS Foundation, репозиторий — `jestjs/jest`.
6−
7− **Размер.** 45 500 звёзд, 6 700 форков на сентябрь 2026.
8−¶ ## Привычки, описанные им самим
9−
10− Правила Jest лежат в [CONTRIBUTING.md](https://github.com/jestjs/jest/blob/main/CONTRIBUTING.md) в корне репозитория, устройство власти — в коротком [GOVERNANCE.md](https://github.com/jestjs/jest/blob/main/GOVERNANCE.md). Первый в основном про сборку и тесты, но несколько абзацев там о том, как проект живёт.
11−
12− **Ядро и посторонние идут одной дорогой:**
13−
14− > Both core team members and external contributors send pull requests which go through the same review process.
15−
16− *И участники основной команды, и внешние контрибьюторы присылают pull request, и те проходят одинаковое ревью.*
17−
18− **Ветка `main` честно названа небезопасной:**
19−
20− > We will do our best to keep `main` in good shape, with tests passing at all times. But in order to move fast, we will make API changes that your application might not be compatible with.
21−
22− *Мы постараемся держать `main` в порядке, чтобы тесты всегда проходили. Но ради скорости будем менять API так, что ваше приложение может оказаться несовместимым.*
23−
24− **Мейнтейнер в GOVERNANCE.md записан один**, и путь к этой роли — через количество и качество работы:
25−
26− > Promoting contributors to maintainers is done by a maintainer after a significant number of high-quality PRs.
27−
28− *Контрибьютора повышает до мейнтейнера мейнтейнер — после значительного числа качественных PR.*
29−¶ ## Привычки, видные по переписке
30−
31− На вопрос отвечают по существу и с чужим `package.json` в руках; просят воспроизведение и разбирают его. Но саму задачу ведёт робот: тридцать дней тишины — метка «протухла», ещё тридцать — закрытие, ещё месяц — блокировка обсуждения с припиской, что трекер не форум поддержки. Задачу закрыли за три месяца до того, как приехала правка.
32−¶ ## Мелкие правила, по которым узнаётся свой
33−
34− **Формата коммитов у Jest нет** — ни в CONTRIBUTING, ни в конфигах репозитория такого правила не записано. Зато записан стиль кода, и последний пункт списка написан сокращениями:
35−
36− > - 2 spaces for indentation (no tabs).
37− > - 80 character line length is strongly preferred.
38− > …
39− > - Avd abbr wrds.
40−
41− *Два пробела на отступ, без табов. 80 символов в строке очень желательно. … Избегайте сокращённых слов.*
42−
43− **Changelog пишет автор правки, а проверяет машина:**
44−
45− > All changes that add a feature to or fix a bug in any of Jest's packages require a changelog entry containing the names of the packages affected, a description of the change, and the number of and link to the pull request.
46−
47− *Любое изменение, добавляющее возможность или чинящее ошибку в любом пакете Jest, требует записи в changelog: затронутые пакеты, описание, номер PR и ссылка на него.*
48−
49− Механика — в `.github/workflows/require-changelog.yml`: если PR трогает `packages/`, бот вешает метку `require-changelog`, а `check-changelog.yml` проверяет, что в разделе `## main` файла CHANGELOG.md есть ссылка именно на этот PR.
50−
51− **Шаблон PR** — два обязательных поля: `Summary` (какую проблему решаем) и `Test plan` (точные команды и их вывод). Линтер — `yarn lint` на ESLint, тесты — `yarn jest`, `yarn test` запускает оба.
52−¶ ## Чего ждать, если придёте со своей правкой
53−
54− Всё ниже — из CONTRIBUTING.md, шаблонов задач и workflow-файлов в `.github/` самого проекта.
55−
56− **Сначала CLA, и проведёт вас бот:**
57−
58− > In order to accept your pull request, we need you to submit a CLA. You only need to do this once… If you are submitting a pull request for the first time, a bot will verify and guide you on how to sign it.
59−
60− *Чтобы принять ваш PR, нам нужно, чтобы вы подписали CLA. Это делается один раз… Если присылаете PR впервые, бот проверит и подскажет, как подписать.*
61−
62− **Сроков ревью не обещают, но срок жизни без ответа известен.** По `close-stale.yml` PR без активности 90 дней получает метку stale и предупреждение:
63−
64− > This PR is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 30 days.
65−
66− *Этот PR устарел: он открыт 90 дней без активности. Снимите метку или напишите комментарий, иначе он будет закрыт через 30 дней.*
67−
68− Черновики и PR с меткой `Pinned` исключены. Закрытые задачи и PR через 30 дней блокируются для комментариев (`lock.yml`).
69−
70− **Баг без воспроизведения закроют, вопрос — тоже.** Задачи без шаблона отключены (`blank_issues_enabled: false`), а шаблон бага предупреждает:
71−
72− > Bug reports without a minimal reproduction will be rejected.
73−
74− *Отчёты об ошибках без минимального воспроизведения будут отклонены.*
75−
76− Метка `Needs Reproduction` закрывает задачу автоматически, метка `Question` — тоже:
77−
78− > The issue tracker is not a help forum.
79−
80− *Трекер задач — не форум помощи.*
81−
82− **Не всякая идея годится в ядро.** Шаблон предложения заранее перечисляет, что обычно не берут:
83−
84− > Common proposals that do not typically make it to core:
85− > - New matchers…
86− > - Changes to the default reporter…
87− > - Changes to node/jsdom test environments…
88−
89− *Что обычно не попадает в ядро: новые матчеры, изменения стандартного репортера, изменения тестовых окружений node/jsdom.*
90−¶ ## Кто в кадре
91−
92− Люди, встреченные в наших разборах этого проекта. Черта называется только вместе с поступком — с датой и ссылкой. Ник — главный, имя — из профиля; нет имени в профиле — только ник.
93−
94− ### mrazauskas — Tom Mrazauskas
95−
96− Три сотни влитых PR в Jest.
97−
98− - 02.04.2023 — [ответил не «замокайте», а разбором чужого `package.json`](https://github.com/jestjs/jest/issues/13967#issuecomment-1493227851): показал поле `exports`, условие `react-server` и готовую прагму с `customExportConditions`;
99− - тот же день — предложил добавить в пакет условие `node` и [**вычеркнул это у себя же**](https://github.com/jestjs/jest/issues/13967#issuecomment-1493284963), получив ответ автора пакета: «UPDATE This can't work on React side». Предложение оставлено видимым;
100− - тогда же — [указал, что настоящая поломка не у него](https://github.com/jestjs/jest/issues/13967#issuecomment-1493348629): «Seems like this is a bug in Next.js», со ссылкой на соседнюю задачу.
101−
102− ### felipedeboni — Felipe K. De Boni
103−
104− 28.02.2023 — [jest#13967](https://github.com/jestjs/jest/issues/13967): открыл задачу, с которой началась история, и сразу перечислил, что уже пробовал.
105−
106− ### TxHawks — Jonathan Pollak
107−
108− 01–02.04.2023 — сказал, что обход с заглушкой у него не работает, и на просьбу дать пример [принёс целый репозиторий](https://github.com/jestjs/jest/issues/13967#issuecomment-1493257215) с воспроизведением.
109−
110− ### timfee — Tim Feeley
111−
112− 14.03.2023 — первый предложил обход: подменить `server-only` пустым модулем. Обход, который работал не у всех и прятал причину.
113−¶ ## Разборы, где встречается
114−
115− - **«Пакет, который ломается нарочно»** — `server-only` падает в тестах; мейнтейнер разбирает чужой `package.json`, робот закрывает задачу за три месяца до починки.
116−
117− ---
118−
119− *Карточка собрана 02.09.2026 из открытых источников: репозиторий, документация проекта, переписка в PR и задачах. Фотографий и личных данных здесь нет и не будет. Нашли неточность или хотите, чтобы вас убрали, — напишите, поправим без вопросов.*
1+¶ [object Object]
2+¶ [object Object]
3+¶ [object Object]
4+¶ [object Object]
5+¶ [object Object]
6+¶ [object Object]
7+¶ [object Object]