Ожидаемый сбой всё равно запускает тест.
Различайте известный дефект, пропуск и неожиданный успех в отчёте.

Переведенное издание. Технические идентификаторы остаются в своей первоначальной форме.

Команда знает, что узкий тест пока падает. Его пропускают ради тихого запуска. Тело больше не выполняется, поэтому отчёт не показывает воспроизводимость дефекта. В Playwright есть аннотация ожидаемого сбоя: тест запускается, а успех становится неожиданным результатом.
Руководство по аннотациям различает skip(), fail() и fixme(). Пропущенный тест не выполняется. Ожидаемо падающий выполняется и должен упасть. fixme подходит случаю, который не запускают из-за медленной работы или аварии. Выбирайте по смыслу и рабочим ограничениям.
Ограничьте пример
Вымышленный пример сравнивает две фиксированные строки. Несовпадение намеренное. Нет настоящего дефекта, браузерного действия или аккаунта. Другой пример делает строки равными, сохраняя аннотацию: получается неожиданный успех и ненулевой код завершения раннера.
import { test, expect } from '@playwright/test';
test('controlled expected mismatch', async () => {
test.fail(true, 'Invented mismatch for annotation demonstration');
expect('actual demo value').toBe('expected demo value');
});Запускайте через раннер Playwright, не как обычный JavaScript. Отчёт сохраняет ошибку утверждения и ожидаемый статус. Успешное завершение раннера здесь означает соответствие ошибки заявленному ожиданию, не равенство строк.
Читайте фактическую ошибку
Аннотация не привязывает сбой к одному конкретному утверждению. Если сначала ломается подготовка, ожидаемый статус может совпасть без достижения дефекта. Упрощайте подготовку, изучайте ошибку и записывайте выполненное утверждение. Не списывайте неожиданные ошибки среды или входа на известный дефект.
Для реальной задачи сохраняйте правильное поведение в утверждении, ссылку на проверяемую задачу и владельца. Не меняйте утверждение для принятия дефекта. Не придумывайте ссылки: наш пример содержит только пояснение.
Условную аннотацию ограничьте затронутой конфигурацией. Если дефект существует в одном браузере, безусловный fail может неверно классифицировать остальные. Условие и ожидаемый статус проверяются вместе с входными данными, не прячутся в удалённом помощнике.
Неожиданный успех требует ревью
Успех может означать исправление, другой путь или ослабленное утверждение. Проверьте перед удалением аннотации. После подтверждения правильного поведения сохраните обычную проходящую проверку вместо постоянного исключения.
Локальный раннер различает три результата: намеренное несовпадение выполняется как ожидаемая ошибка; равные строки выполняются с неожиданным успехом; пропущенное тело не запускается. Это механика аннотаций, не готовность продукта к релизу.
Небезопасный или слишком дорогой тест требует отдельного решения о запуске. Ожидаемый сбой не разрешает разрушительные действия, платежи или производственные данные. Укажите пропущенное покрытие и причину отсутствия проверки.
AnyTest описывает тесты для человеческого ревью. Проверяйте исключения так же внимательно, как утверждения и подготовку. Конкретная интеграция AnyTest с дефектами или ожидаемыми сбоями не заявлена. Для реального исключения сохраняйте владельца и дату следующего ревью.
Общие вопросы
Пропускает ли test.fail тело?
Нет. Тест выполняется с ожиданием ошибки.
Доказывает ли ожидаемый сбой достижение нужного дефекта?
Нет. Проверьте фактическую ошибку и достигнутое утверждение.