Skip to content

Поддержка ЮТест.Пропустить() в обработчиках событий теста - #687

Open
1cgh wants to merge 1 commit into
bia-technologies:developfrom
1cgh:feature/686
Open

Поддержка ЮТест.Пропустить() в обработчиках событий теста#687
1cgh wants to merge 1 commit into
bia-technologies:developfrom
1cgh:feature/686

Conversation

@1cgh

@1cgh 1cgh commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Описание изменений

При регистрации ошибки события для событий теста дополнительно проверяем тип ошибки. И если это пропуск теста, то формируем данные ошибки пропуска, а не ошибки обработки события.


  • Добавлены тесты
  • Изменения отражены в документации (при необходимости)

Close #686

Summary by CodeRabbit

  • Bug Fixes
    • Исправлена регистрация ошибок для событий тестов: пропуски теперь корректно распознаются и сохраняются как пропущенные, а не как ошибки обработки события.
    • Улучшена точность данных об ошибках в журналах выполнения тестов.

При регистрации ошибки события для событий теста дополнительно проверяем тип ошибки. И если это пропуск теста, то формируем данные ошибки пропуска, а не ошибки обработки события.
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

В процедуру ЗарегистрироватьОшибкуСобытияИсполнения добавлена обработка случая, когда событие относится к тесту и классифицируется как пропуск. В этом случае тип ошибки переопределяется, а данные ошибки формируются через ДанныеОшибкиПропуска вместо стандартных данных ошибки обработки события.

Changes

Обработка пропуска теста в обработчиках событий

Layer / File(s) Summary
Классификация ошибки пропуска теста
exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl
Добавлена проверка ОписаниеСобытия.Тест, переопределение ТипОшибки по имени метода теста и формирование ДанныеОшибки через ДанныеОшибкиПропуска при типе Пропущен.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Тест
  participant ЗарегистрироватьОшибкуСобытияИсполнения
  participant ТипОшибки
  participant ДанныеОшибкиПропуска

  Тест->>ЗарегистрироватьОшибкуСобытияИсполнения: ошибка события (ОписаниеСобытия.Тест задан)
  ЗарегистрироватьОшибкуСобытияИсполнения->>ТипОшибки: ТипОшибки(Ошибка, ИмяМетодаТеста)
  ТипОшибки-->>ЗарегистрироватьОшибкуСобытияИсполнения: Пропущен
  ЗарегистрироватьОшибкуСобытияИсполнения->>ДанныеОшибкиПропуска: ДанныеОшибкиПропуска(Ошибка)
  ДанныеОшибкиПропуска-->>ЗарегистрироватьОшибкуСобытияИсполнения: ДанныеОшибки
  ЗарегистрироватьОшибкуСобытияИсполнения->>ЗарегистрироватьОшибкуСобытияИсполнения: Объект.Ошибки.Добавить(ДанныеОшибки)
Loading

Poem

Зайчонок тестов прыгнул в код,
Пропуск больше не в почёт — не провал он, не банан!
Один вложенный «Если» тут,
И ошибки верно все текут. 🐰✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Заголовок кратко и точно отражает основное изменение: поддержку ЮТест.Пропустить() в обработчиках событий теста.
Linked Issues check ✅ Passed Изменение соответствует #686: пропуск в обработчиках теста теперь регистрируется как пропуск, а не как ОшибкаОбработкиСобытия.
Out of Scope Changes check ✅ Passed В PR нет признаков посторонних изменений: правка локальна и связана только с обработкой пропуска в событиях теста.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl (1)

36-43: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Дублирование проверки ОписаниеСобытия.Тест <> Неопределено.

Условие на строке 36 и на строке 43 проверяет одно и то же. Эти блоки можно объединить, чтобы избежать дублирования и улучшить читаемость.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl`
around lines 36 - 43, В модуле ЮТРегистрацияОшибокСлужебный есть дублирование
проверки ОписаниеСобытия.Тест <> Неопределено вокруг логики с ТипОшибки и
ДанныеОшибкиПропуска. Объедини эти одинаковые условия в один блок, чтобы вся
обработка ошибки для ОписаниеСобытия.Тест выполнялась под одной проверкой, и
убери повторный if рядом с ТипОшибки/ЮТФабрикаСлужебный.ТипыОшибок().Пропущен.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl`:
- Around line 34-41: Устраните двойное формирование ошибки в
ЮТРегистрацияОшибокСлужебный: сейчас ДанныеОшибки вызывается безусловно, а затем
при Пропущен — ДанныеОшибкиПропуска, из-за чего теряются сообщения и детали.
Перестройте логику в этом месте так, чтобы для события теста выбирался только
один путь формирования результата: либо обычный ДанныеОшибки, либо
ДанныеОшибкиПропуска, а не оба. Ориентируйтесь на паттерн из
ЗарегистрироватьОшибкуВыполненияТеста, где используется взаимоисключающий вызов
нужной функции.

---

Nitpick comments:
In `@exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl`:
- Around line 36-43: В модуле ЮТРегистрацияОшибокСлужебный есть дублирование
проверки ОписаниеСобытия.Тест <> Неопределено вокруг логики с ТипОшибки и
ДанныеОшибкиПропуска. Объедини эти одинаковые условия в один блок, чтобы вся
обработка ошибки для ОписаниеСобытия.Тест выполнялась под одной проверкой, и
убери повторный if рядом с ТипОшибки/ЮТФабрикаСлужебный.ТипыОшибок().Пропущен.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: e1121c68-d725-4908-8485-e55eb6526ceb

📥 Commits

Reviewing files that changed from the base of the PR and between 23fd2db and 8087f39.

📒 Files selected for processing (1)
  • exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl

Comment on lines 34 to +41
ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки);

// Обработка пропуска теста для событий теста.
Если ОписаниеСобытия.Тест <> Неопределено Тогда
ТипОшибки = ТипОшибки(Ошибка, ОписаниеСобытия.Тест.ПолноеИмяМетода);
Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда
ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка);
КонецЕсли;
КонецЕсли;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Двойной вызов ДанныеОшибки и ДанныеОшибкиПропуска приводит к потере данных.

На строке 34 ДанныеОшибки вызывается безусловно, выполняя ДобавитьСообщенияПользователю() (которая через ПолучитьСообщенияПользователю(Истина) очищает очередь сообщений) и ДеталиОшибки() (которая очищает контекст деталей). Затем, при пропуске, ДанныеОшибкиПропуска на строке 39 снова вызывает ДобавитьСообщенияПользователю(), но очередь уже пуста. Сообщения пользователя и детали ошибки остаются привязанными к отброшенному объекту ДанныеОшибки и теряются в финальных данных ошибки пропуска.

Для сравнения, ЗарегистрироватьОшибкуВыполненияТеста (строки 72–86) использует взаимоисключающий паттерн — вызывается только одна из функций формирования данных ошибки.

🔧 Предлагаемое исправление
 Процедура ЗарегистрироватьОшибкуСобытияИсполнения(ИмяСобытия, ОписаниеСобытия, Ошибка) Экспорт

 	ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().ОшибкаОбработкиСобытия;
 	Пояснение = ЮТСообщенияСлужебный.СообщениеОбОшибкеСобытия(ИмяСобытия, Ошибка);
-	ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки);
-	// Обработка пропуска теста для событий теста.
-	Если ОписаниеСобытия.Тест <> Неопределено Тогда
-		ТипОшибки = ТипОшибки(Ошибка, ОписаниеСобытия.Тест.ПолноеИмяМетода);
-		Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда
-			ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка);
-		КонецЕсли;
-	КонецЕсли;
+
+	Если ОписаниеСобытия.Тест <> Неопределено Тогда
+		ТипОшибки = ТипОшибки(Ошибка, ОписаниеСобытия.Тест.ПолноеИмяМетода);
+	КонецЕсли;
+
+	Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда
+		ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка);
+	Иначе
+		ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки);
+	КонецЕсли;

 	Если ОписаниеСобытия.Тест <> Неопределено Тогда
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки);
// Обработка пропуска теста для событий теста.
Если ОписаниеСобытия.Тест <> Неопределено Тогда
ТипОшибки = ТипОшибки(Ошибка, ОписаниеСобытия.Тест.ПолноеИмяМетода);
Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда
ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка);
КонецЕсли;
КонецЕсли;
Если ОписаниеСобытия.Тест <> Неопределено Тогда
ТипОшибки = ТипОшибки(Ошибка, ОписаниеСобытия.Тест.ПолноеИмяМетода);
КонецЕсли;
Если ТипОшибки = ЮТФабрикаСлужебный.ТипыОшибок().Пропущен Тогда
ДанныеОшибки = ДанныеОшибкиПропуска(Ошибка);
Иначе
ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки);
КонецЕсли;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@exts/yaxunit/src/CommonModules/ЮТРегистрацияОшибокСлужебный/Module.bsl`
around lines 34 - 41, Устраните двойное формирование ошибки в
ЮТРегистрацияОшибокСлужебный: сейчас ДанныеОшибки вызывается безусловно, а затем
при Пропущен — ДанныеОшибкиПропуска, из-за чего теряются сообщения и детали.
Перестройте логику в этом месте так, чтобы для события теста выбирался только
один путь формирования результата: либо обычный ДанныеОшибки, либо
ДанныеОшибкиПропуска, а не оба. Ориентируйтесь на паттерн из
ЗарегистрироватьОшибкуВыполненияТеста, где используется взаимоисключающий вызов
нужной функции.

ДанныеОшибки = ДанныеОшибки(Ошибка, Пояснение, ТипОшибки);

// Обработка пропуска теста для событий теста.
Если ОписаниеСобытия.Тест <> Неопределено Тогда

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Думаю надо расширить, не только для тестов но и для модулей/наборов

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

гм. а там какое поведение ожидаем? что должны заскипать все тесты модуля/набора?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

нам же еще важно, чтоб в отчетности все отразилось корректно

@1cgh

1cgh commented Jul 14, 2026

Copy link
Copy Markdown
Contributor Author

еще заметили, что скип в лог в данном случае попадает как ошибка
[Сервер][ERR]: Ошибка обработки события:
[Skip]

что не ок

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Обработчики событий теста не поддерживают пропуск теста

2 participants