mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
test: update fixtures flow, add different browsers
This commit is contained in:
@@ -54,10 +54,14 @@ CSS-классы и конкретный формат временного URL
|
||||
Изображения создаются воспроизводимыми helpers в `web/e2e/helpers/fixtures.ts`.
|
||||
Тесты не добавляют большие бинарные файлы и не зависят от локальных
|
||||
пользовательских файлов. Runtime-fixtures для malformed/special PNG проверяют
|
||||
browser-контракт: critical CRC и truncated отклоняются, ancillary CRC и хвост
|
||||
после `IEND` допускаются, palette/16-bit декодируются. `toPass()` допускается
|
||||
только для ограниченного ожидания hydration или асинхронного результата; он не
|
||||
должен превращать проверку продукта в бесконечный retry.
|
||||
browser-контракт: critical CRC и truncated отклоняются движком, ancillary CRC и
|
||||
хвост после `IEND` допускаются, palette/16-bit декодируются. Отказ декодера —
|
||||
свойство движка, поэтому ожидание задаётся per-engine в
|
||||
`web/e2e/png-fixtures.spec.ts`, а не через skip. Общее требование для всех
|
||||
движков: битый файл не роняет страницу, отказ показывается alert-ом, а успешный
|
||||
декод даёт результат без ошибки. `toPass()` допускается только для ограниченного
|
||||
ожидания hydration или асинхронного результата; он не должен превращать проверку
|
||||
продукта в бесконечный retry.
|
||||
|
||||
Чистая логика схемы, layout и preview-модели (defaults, sanitization,
|
||||
`resolveLayoutGroups`, `buildSchemaPreviewModel`) проверяется в
|
||||
@@ -78,6 +82,11 @@ text — `renderText` + результат, generator — auto-run без upload
|
||||
checklist. В комментарии указывается ссылка на неё. После исправления тест и
|
||||
ссылка обновляются вместе; в текущем Q6e baseline активных fixme нет.
|
||||
|
||||
Если тест сравнивает два состояния одного элемента, он ждёт изменения значения
|
||||
(`not.toHaveText`, `not.toHaveAttribute`), а не его видимости. Пересчёт идёт
|
||||
через debounce, поэтому `toBeVisible()` после второго ввода проходит на старом
|
||||
значении. Такой тест флакает по таймингу и обычно ловится на CI, а не локально.
|
||||
|
||||
## 6. Проверки
|
||||
|
||||
Для изменений e2e выполняются:
|
||||
@@ -95,3 +104,38 @@ pnpm verify
|
||||
`verify` не включает Playwright: E2E остаётся отдельным тяжёлым gate. В CI
|
||||
non-blocking E2E не считается заменой локальному smoke; перед ревью фиксируются
|
||||
число passed, skipped и известные fixme.
|
||||
|
||||
## 7. Browser matrix
|
||||
|
||||
`web/playwright.config.ts` запускает четыре проекта:
|
||||
|
||||
| Проект | Движок | Спецификации |
|
||||
| ----------------- | -------- | ---------------------------------------------------------------------- |
|
||||
| `chromium` | Chromium | все e2e |
|
||||
| `firefox` | Firefox | `pipeline`, `png-fixtures`, `text-and-verdicts` |
|
||||
| `webkit` | WebKit | `pipeline`, `png-fixtures`, `text-and-verdicts` |
|
||||
| `mobile-chromium` | Chromium | `navigation`, `catalog`, `generators`, `pipeline`, 390×844, `hasTouch` |
|
||||
|
||||
- Новые engine-специфичные фичи сначала добавляются в `chromium`, потом
|
||||
решается, попадает ли spec в `browserContractTests`.
|
||||
- Расхождения декодеров не ужесточаются и не скрываются skip-ом: они описаны в
|
||||
тесте как ожидаемое поведение движка.
|
||||
|
||||
| Fixture | Отклоняют |
|
||||
| ------------------------------------ | ------------------------- |
|
||||
| `crc-bad-idat.png` | Chromium, Firefox |
|
||||
| `truncated-header.png` | Chromium, Firefox, WebKit |
|
||||
| `truncated-no-iend.png` | Chromium |
|
||||
| `idat-cut.png` | Chromium |
|
||||
| ancillary CRC, tail, palette, 16-bit | ни один движок |
|
||||
|
||||
- Firefox и WebKit работают с теми же таймаутами, что и Chromium: движок не
|
||||
причина расхождений, поэтому per-project `expect.timeout` не задаётся.
|
||||
- `workers` — 1 локально и 2 в CI. Playwright не умеет per-project лимит
|
||||
воркеров, а browser matrix ограничена памятью, а не CPU: при высокой
|
||||
параллельности браузеры на машине с 16 GB RAM не успевают поднять worker, и
|
||||
тесты падают без ошибок. Локальный matrix поэтому медленный, но не нагружает
|
||||
компьютер.
|
||||
- Локальный baseline: 276 тестов, 276 passed, 0 skipped, 0 failed.
|
||||
- Visual snapshots и coverage thresholds не часть matrix; они вынесены в
|
||||
`docs/plan-codebase-quality.md` (Q6f.4).
|
||||
|
||||
Reference in New Issue
Block a user