Бета · редакция 2026.10-beta1 · MCP 2026-07-28

Контрактные и негативные тесты

L42 · MCP 2026-07-28 · открытая бета · редакция 2026.10-beta1

Я хочу, чтобы обновление зависимости ломало тест, а не рабочий сценарий читателя. Контрактный тест проверяет observable поведение: envelope, schema, версии, результаты и переходы состояний. Негативный тест показывает, что опасный запрос действительно отклоняется.

Предварительно: L07 · L18 · L28 · L39

Как я это использую

Сохраните golden fixtures modern и legacy отдельно. Минимальный набор: tools/list и call, неверный id, отсутствие capability, decline/cancel, MRTR retry с подменённым state, wrong audience, issuer mismatch и повтор записи после обрыва. Для OAuth используйте локальный fake AS и фиктивные credentials. Не делайте CI зависимым от личного аккаунта или платной модели.

Проверяемая интеграция

Разбираем конкретный контракт

Это учебный fixture: поля с доменом .example и идентификаторы вымышлены. Если показан фрагмент, его нужно поместить в соответствующий envelope выбранного профиля.

{
  "cases": [
    {
      "input": "wrong audience",
      "expected": "reject"
    },
    {
      "input": "decline",
      "expected": "no write"
    },
    {
      "input": "same operation key twice",
      "expected": "one effect"
    },
    {
      "input": "valid read",
      "expected": "complete"
    }
  ]
}

Лаборатория · L42

Измените условия, проверьте результат и разберите ошибку. Все адреса и данные учебные.

Что легко сломать

В редакторе выберите ожидаемый исход для нескольких повреждений. Reference-проект рядом с исходниками курса выполняет локальные проверки без production daemon. Сквозной тест с настоящим клиентом дополняет контрактные fixtures, но не заменяет их.

Практика и самопроверка

Выбрать кейсы для malformed input, версии, retry и auth. Восстановить тест, который ошибочно давал зелёный результат.

Я советую сначала предсказать результат, затем изменить один параметр в лаборатории и объяснить разницу. Сохраните небольшой fixture с нормальным и ошибочным случаем для своего проекта. Тренажёр открыт без регистрации; для сохранения ответов на тесты и завершения урока войдите в аккаунт.

В конце страницы — три вопроса. После правильных ответов можно завершить урок; ошибка в следующей тренировке не стирает уже полученное подтверждение этой редакции теста.

Попробовать локально

Скачать reference-проект с lockfile и тестами (после входа). Распакуйте в отдельную папку, используйте Node.js 22.14 или новее.

npm ci
npm test
npm start

npm start запускает локальный stdio-сервер задач. Остановите его после практики. Тесты используют официальный TypeScript SDK v2.3.1, проверяют современный HTTP handler, MRTR, отказ и подмену состояния. Fake AS проверяет PKCE, issuer, audience и одноразовый code без внешнего аккаунта. Это учебный проект: production требует долговременного хранилища, настоящей проверки токенов и транзакционной идемпотентности.

На что я опирался

Профиль и ссылки проверены 15 октября 2026. Core, deprecated compatibility и extensions в этом курсе помечены отдельно. Примеры объясняют выбранные сценарии; для реализации сверяйте нормативные MUST/SHOULD и schema соответствующей версии.

Проверка знаний

Читайте свободно. Войдите, чтобы отвечать и сохранять прогресс.

Что полезнее для CI OAuth?

Что проверять при decline?

Заменяет ли один happy path негативные тесты?