Визуальное тестирование компонентов — ключевой аспект разработки интерфейсов на Lit, обеспечивающий стабильность отображения и корректность взаимодействий. В отличие от unit-тестов, визуальные тесты проверяют не логику, а внешний вид компонентов, их реакцию на свойства и слоты. Такой подход помогает выявлять регрессии после изменений в коде или стилях.
Для визуального тестирования компонентов Lit используются специализированные библиотеки и фреймворки:
Выбор зависит от требований проекта: локальное тестирование можно организовать с помощью Web Test Runner, интеграцию с CI/CD — через Percy или Chromatic.
npm install @web/test-runner @web/test-runner-playwright @open-wc/testing
web-test-runner.config.js):import { playwrightLauncher } from '@web/test-runner-playwright';
export default {
browsers: [
playwrightLauncher({ product: 'chromium' }),
playwrightLauncher({ product: 'firefox' }),
playwrightLauncher({ product: 'webkit' })
],
files: 'test/**/*.test.js'
};
@open-wc/testing с использованием
fixture для рендеринга компонентов.import { fixture, html, expect } from '@open-wc/testing';
import './my-component.js';
describe('MyComponent', () => {
it('отрисовывается с корректным текстом', async () => {
const el = await fixture(html`<my-component text="Привет"></my-component>`);
expect(el.shadowRoot.textContent).to.include('Привет');
});
});
Визуальные тесты строятся на принципе snapshot testing: создается эталонное изображение компонента и сравнивается с текущим состоянием после изменений.
Loki позволяет автоматизировать процесс:
npx loki init
npx loki test
Loki делает скриншоты каждого компонента в различных состояниях и сравнивает их с эталонными изображениями.
В Lit важно учитывать shadow DOM, так как многие стили инкапсулированы. Инструменты визуального тестирования должны поддерживать рендеринг Shadow DOM, иначе снимки будут неполными.
const states = [
{ disabled: true },
{ disabled: false },
{ highlighted: true },
];
for (const state of states) {
it(`отрисовывается корректно с ${JSON.stringify(state)}`, async () => {
const el = await fixture(html`<my-component ...=${state}></my-component>`);
expect(el).shadowDom.to.equalSnapshot();
});
}
const el = await fixture(html`
<my-component>
<span slot="label">Текст</span>
</my-component>
`);
expect(el).shadowDom.to.equalSnapshot();
Автоматизация визуального тестирования в CI/CD гарантирует, что изменения интерфейса не сломают существующие компоненты. Для этого:
package.json:"scripts": {
"test": "web-test-runner",
"visual-test": "loki test"
}
Визуальное тестирование компонентов Lit позволяет поддерживать высокий уровень стабильности интерфейса, предотвращает регрессии и обеспечивает предсказуемое поведение компонентов в различных состояниях и окружениях.