Немного магии: как устроен API фикстур в Playwright
Minhir 28 минут назад Немного магии: как устроен API фикстур в Playwright Средний 6 мин 1.1K JavaScript * Node.JS * Проектирование API * Тестирование IT-систем * Из песочницыПеревод Автор оригинала: Vladimir Ivakin Один...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. Minhir 28 минут назад Немного магии: как устроен API фикстур в Playwright Средний 6 мин 1. 1K JavaScript * Node. JS * Проектирование API * Тестирование IT-систем * Из песочницыПеревод Автор оригинала: Vladimir Ivakin Один из лучших способов по-настоящему разобраться в инструменте — понять, как он устроен изнутри.
С большинством JavaScript-библиотек у меня работает так: мне не нужно заглядывать в исходники, потому что по дизайну API уже можно примерно представить его реализацию. Но API фикстур в Playwright поставил меня в тупик. Минимальный тест выглядит следующим образом: from "@playwright/test"; test("basic test", async ({ page }) => { await page.
Технические детали
goto(" await expect(page). toHaveTitle(/Playwright/); }); В этом примере мы запрашиваем у Playwright фикстуру page и используем её в тесте. На первый взгляд ничего необычного: Playwright передаёт нам объект с набором фикстур, включая page.
Вот как можно упрощённо представить реализацию функции test:async function test(title, body) { const browser = await firefox. launch(); const context = await browser. newContext(); const page = await context.
newPage(); const fixtures = { page, context, browser }; body(fixtures); // ... teardown code here... } Но если бы всё было так просто!
Отраслевые последствия
В документации можно прочесть следующее:Fixtures are on-demand — you can define as many fixtures as you’d like, and Playwright Test will setup only the ones needed by your test and nothing else. То есть фикстуры в Playwright ленивые. Если page не используется, Playwright не будет её инициализировать и тем самым сократит время выполнения теста.
Но в нашем примере выше мы всегда инициализируем все поля объекта fixtures до запуска теста. Как Playwright удаётся сделать фикстуры ленивыми? Решение на основе ProxyОдин из вариантов — использовать Proxy для отслеживания тех полей, к которым обращаются внутри тестового сценария.
Это даст нам возможность инициализировать только нужные поля и пропускать остальные. Для простоты приведём пример с использованием геттеров. Код с Proxy был бы более общим вариантом той же идеи:async function test(title, body) { const browser = await firefox.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




