From:To:
11¶ # Jest
22
3− **Что это.** Инструмент для тестов на JavaScript. Сам проект описывает себя так: «Delightful JavaScript Testing».
3+ **What it is.** A testing tool for JavaScript. The project describes itself as: "Delightful JavaScript Testing".
44
5− **Возраст.** Репозиторий на GitHub заведён 10 декабря 2013 года; с 2022 года проект под OpenJS Foundation, репозиторий — `jestjs/jest`.
5+ **Age.** The GitHub repository was created on December 10, 2013; since 2022, the project is under the OpenJS Foundation, the repository is `jestjs/jest`.
66
7− **Размер.** 45 500 звёзд, 6 700 форков на сентябрь 2026.
8−¶ ## Привычки, описанные им самим
7+ **Size.** 45,500 stars, 6,700 forks as of September 2026.
8+¶ ## Habits, as described by itself
99
10− Правила Jest лежат в [CONTRIBUTING.md](https://github.com/jestjs/jest/blob/main/CONTRIBUTING.md) в корне репозитория, устройство власти — в коротком [GOVERNANCE.md](https://github.com/jestjs/jest/blob/main/GOVERNANCE.md). Первый в основном про сборку и тесты, но несколько абзацев там о том, как проект живёт.
10+ The rules of Jest are in [CONTRIBUTING.md](https://github.com/jestjs/jest/blob/main/CONTRIBUTING.md) at the root of the repository, the power structure is in the short [GOVERNANCE.md](https://github.com/jestjs/jest/blob/main/GOVERNANCE.md). The first mainly covers assembly and tests, but there are a few paragraphs about how the project lives.
1111
12− **Ядро и посторонние идут одной дорогой:**
12+ **Core and outsiders go the same way:**
1313
1414 > Both core team members and external contributors send pull requests which go through the same review process.
1515
16− *И участники основной команды, и внешние контрибьюторы присылают pull request, и те проходят одинаковое ревью.*
16+ *Both core team members and external contributors send pull requests, and they go through the same review.*
1717
18− **Ветка `main` честно названа небезопасной:**
18+ **The `main` branch is honestly named unsafe:**
1919
2020 > 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.
2121
22− *Мы постараемся держать `main` в порядке, чтобы тесты всегда проходили. Но ради скорости будем менять API так, что ваше приложение может оказаться несовместимым.*
22+ *We will try to keep `main` in order so that tests always pass. But for the sake of speed, we will change the API in ways that your application may become incompatible.*
2323
24− **Мейнтейнер в GOVERNANCE.md записан один**, и путь к этой роли — через количество и качество работы:
24+ **One maintainer is listed in GOVERNANCE.md**, and the path to this role is through the quantity and quality of work:
2525
2626 > Promoting contributors to maintainers is done by a maintainer after a significant number of high-quality PRs.
2727
28− *Контрибьютора повышает до мейнтейнера мейнтейнер — после значительного числа качественных PR.*
29−¶ ## Привычки, видные по переписке
28+ *A maintainer promotes a contributor to maintainer after a significant number of quality PRs.*
29+¶ ## Habits, visible from correspondence
3030
31− На вопрос отвечают по существу и с чужим `package.json` в руках; просят воспроизведение и разбирают его. Но саму задачу ведёт робот: тридцать дней тишины — метка «протухла», ещё тридцать — закрытие, ещё месяц — блокировка обсуждения с припиской, что трекер не форум поддержки. Задачу закрыли за три месяца до того, как приехала правка.
32−¶ ## Мелкие правила, по которым узнаётся свой
31+ Questions are answered substantively and with someone else's `package.json` in hand; they ask for reproduction and analyze it. But the task itself is led by a robot: thirty days of silence — the label "stale", another thirty — closure, another month — blocking discussion with a note that the tracker is not a support forum. The task was closed three months before the fix arrived.
32+¶ ## Minor rules by which one recognizes their own
3333
34− **Формата коммитов у Jest нет** — ни в CONTRIBUTING, ни в конфигах репозитория такого правила не записано. Зато записан стиль кода, и последний пункт списка написан сокращениями:
34+ **There is no commit format for Jest** — neither in CONTRIBUTING nor in the repository configs is such a rule recorded. However, a coding style is recorded, and the last item on the list is written in abbreviations:
3535
3636 > - 2 spaces for indentation (no tabs).
3737 > - 80 character line length is strongly preferred.
3838 > …
3939 > - Avd abbr wrds.
4040
41− *Два пробела на отступ, без табов. 80 символов в строке очень желательно. … Избегайте сокращённых слов.*
41+ *Two spaces for indentation, no tabs. 80 characters per line is strongly preferred. … Avoid abbreviated words.*
4242
43− **Changelog пишет автор правки, а проверяет машина:**
43+ **Changelog is written by the author of the change, and checked by a machine:**
4444
4545 > 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.
4646
47− *Любое изменение, добавляющее возможность или чинящее ошибку в любом пакете Jest, требует записи в changelog: затронутые пакеты, описание, номер PR и ссылка на него.*
47+ *Any change that adds a feature or fixes a bug in any Jest package requires an entry in the changelog: affected packages, description, PR number, and a link to it.*
4848
49− Механика — в `.github/workflows/require-changelog.yml`: если PR трогает `packages/`, бот вешает метку `require-changelog`, а `check-changelog.yml` проверяет, что в разделе `## main` файла CHANGELOG.md есть ссылка именно на этот PR.
49+ The mechanics are in `.github/workflows/require-changelog.yml`: if the PR touches `packages/`, the bot adds the `require-changelog` label, and `check-changelog.yml` checks that there is a link to this PR in the `## main` section of the CHANGELOG.md file.
5050
51− **Шаблон PR** — два обязательных поля: `Summary` (какую проблему решаем) и `Test plan` (точные команды и их вывод). Линтер — `yarn lint` на ESLint, тесты — `yarn jest`, `yarn test` запускает оба.
52−¶ ## Чего ждать, если придёте со своей правкой
51+ **PR template** — two mandatory fields: `Summary` (what problem we are solving) and `Test plan` (exact commands and their output). Linter — `yarn lint` on ESLint, tests — `yarn jest`, `yarn test` runs both.
52+¶ ## What to expect if you come with your own fix
5353
54− Всё ниже — из CONTRIBUTING.md, шаблонов задач и workflow-файлов в `.github/` самого проекта.
54+ Everything below is from CONTRIBUTING.md, task templates, and workflow files in `.github/` of the project itself.
5555
56− **Сначала CLA, и проведёт вас бот:**
56+ **First, CLA, and a bot will guide you:**
5757
5858 > 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.
5959
60− *Чтобы принять ваш PR, нам нужно, чтобы вы подписали CLA. Это делается один раз… Если присылаете PR впервые, бот проверит и подскажет, как подписать.*
60+ *To accept your PR, we need you to sign a CLA. This is done once… If you are submitting a PR for the first time, a bot will check and guide you on how to sign it.*
6161
62− **Сроков ревью не обещают, но срок жизни без ответа известен.** По `close-stale.yml` PR без активности 90 дней получает метку stale и предупреждение:
62+ **No review deadlines are promised, but the lifespan without a response is known.** According to `close-stale.yml`, a PR without activity for 90 days gets the stale label and a warning:
6363
6464 > 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.
6565
66− *Этот PR устарел: он открыт 90 дней без активности. Снимите метку или напишите комментарий, иначе он будет закрыт через 30 дней.*
66+ *This PR is stale: it has been open for 90 days without activity. Remove the label or comment, otherwise it will be closed in 30 days.*
6767
68− Черновики и PR с меткой `Pinned` исключены. Закрытые задачи и PR через 30 дней блокируются для комментариев (`lock.yml`).
68+ Drafts and PRs with the `Pinned` label are excluded. Closed tasks and PRs are blocked from comments after 30 days (`lock.yml`).
6969
70− **Баг без воспроизведения закроют, вопрос — тоже.** Задачи без шаблона отключены (`blank_issues_enabled: false`), а шаблон бага предупреждает:
70+ **A bug without reproduction will be closed, a question — too.** Tasks without a template are disabled (`blank_issues_enabled: false`), and the bug template warns:
7171
7272 > Bug reports without a minimal reproduction will be rejected.
7373
74− *Отчёты об ошибках без минимального воспроизведения будут отклонены.*
74+ *Bug reports without minimal reproduction will be rejected.*
7575
76− Метка `Needs Reproduction` закрывает задачу автоматически, метка `Question` — тоже:
76+ The `Needs Reproduction` label automatically closes the task, the `Question` label does too:
7777
7878 > The issue tracker is not a help forum.
7979
80− *Трекер задач — не форум помощи.*
80+ *The issue tracker is not a help forum.*
8181
82− **Не всякая идея годится в ядро.** Шаблон предложения заранее перечисляет, что обычно не берут:
82+ **Not every idea is suitable for the core.** The proposal template lists in advance what is usually not accepted:
8383
8484 > Common proposals that do not typically make it to core:
8585 > - New matchers…
8686 > - Changes to the default reporter…
8787 > - Changes to node/jsdom test environments…
8888
89− *Что обычно не попадает в ядро: новые матчеры, изменения стандартного репортера, изменения тестовых окружений node/jsdom.*
90−¶ ## Кто в кадре
89+ *What usually does not make it to the core: new matchers, changes to the default reporter, changes to node/jsdom test environments.*
90+¶ ## Who is in the frame
9191
92− Люди, встреченные в наших разборах этого проекта. Черта называется только вместе с поступком — с датой и ссылкой. Ник — главный, имя — из профиля; нет имени в профиле — только ник.
92+ People encountered in our analyses of this project. The trait is named only together with the action — with the date and link. Nickname — main, name — from the profile; no name in the profile — only the nickname.
9393
9494 ### mrazauskas — Tom Mrazauskas
9595
96− Три сотни влитых PR в Jest.
96+ Three hundred PRs merged into Jest.
9797
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», со ссылкой на соседнюю задачу.
98+ - 02.04.2023 — [responded not with "lock it", but with an analysis of someone else's `package.json`](https://github.com/jestjs/jest/issues/13967#issuecomment-1493227851): showed the `exports` field, the `react-server` condition, and a ready pragma with `customExportConditions`;
99+ - the same day — suggested adding a `node` condition to the package and [**crossed it out for himself**](https://github.com/jestjs/jest/issues/13967#issuecomment-1493284963), receiving a response from the package author: "UPDATE This can't work on React side". The suggestion remains visible;
100+ - at the same time — [pointed out that the real breakage is not his](https://github.com/jestjs/jest/issues/13967#issuecomment-1493348629): "Seems like this is a bug in Next.js", with a link to a neighboring task.
101101
102102 ### felipedeboni — Felipe K. De Boni
103103
104− 28.02.2023 — [jest#13967](https://github.com/jestjs/jest/issues/13967): открыл задачу, с которой началась история, и сразу перечислил, что уже пробовал.
104+ 28.02.2023 — [jest#13967](https://github.com/jestjs/jest/issues/13967): opened the task that started the story and immediately listed what he had already tried.
105105
106106 ### TxHawks — Jonathan Pollak
107107
108− 01–02.04.2023 — сказал, что обход с заглушкой у него не работает, и на просьбу дать пример [принёс целый репозиторий](https://github.com/jestjs/jest/issues/13967#issuecomment-1493257215) с воспроизведением.
108+ 01–02.04.2023 — said that the workaround with the stub does not work for him, and at the request to provide an example [brought a whole repository](https://github.com/jestjs/jest/issues/13967#issuecomment-1493257215) with reproduction.
109109
110110 ### timfee — Tim Feeley
111111
112− 14.03.2023 — первый предложил обход: подменить `server-only` пустым модулем. Обход, который работал не у всех и прятал причину.
113−¶ ## Разборы, где встречается
112+ 14.03.2023 — first suggested a workaround: replace `server-only` with an empty module. A workaround that did not work for everyone and hid the cause.
113+¶ ## Analyses where it appears
114114
115− - **«Пакет, который ломается нарочно»** — `server-only` падает в тестах; мейнтейнер разбирает чужой `package.json`, робот закрывает задачу за три месяца до починки.
115+ - **"A package that breaks on purpose"** — `server-only` fails in tests; the maintainer analyzes someone else's `package.json`, the robot closes the task three months before the fix.
116116
117117 ---
118118
119− *Карточка собрана 02.09.2026 из открытых источников: репозиторий, документация проекта, переписка в PR и задачах. Фотографий и личных данных здесь нет и не будет. Нашли неточность или хотите, чтобы вас убрали, — напишите, поправим без вопросов.*
119+ *The card was compiled on 02.09.2026 from open sources: the repository, project documentation, correspondence in PRs and tasks. There are no photographs or personal data here and there will be none. If you find an inaccuracy or want to be removed, please write, we will correct it without questions.*