Skip to content

Compare versions

From:To:
+7119
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]