Все в масштабе становится немного сложнее, медленно, но верно, многие строительные блоки внутренних сервисов были системой дизайна DWP, которая включает структурные компоненты (заголовок, ключевые детали, нижний колонтитул) и более функциональные, такие как временная шкала. .

До этого во многих случаях у нас были люди, которые делали компоненты, или вставляли из разных прототипов другие сервисы и модифицировали шапку GOV.UK.

В одном подключенном сервисе мы получили 5 вариантов заголовка, в основном связанных с размером шрифта и выравниванием.

Задача решена?

Ну, частично. Иметь единую точку истины очень полезно, но кое-что все же произошло.

  1. Локальные изменения
  2. Ошибки в дизайн-системе
  3. Изменения в том, что отображается

Некоторые из них были пойманы, и некоторые из них были запущены в производство.

Визуальная регрессия позволяет нам протестировать компонент, использовать отрендеренную версию компонента (с данными) и с помощью драматург сравнить его.

Это легко сломать, но столь же дешево сделать, и в приведенном выше примере это устранило бы большинство непреднамеренных проблем.

Когда это упаковано, это становится артефактом дизайна, который мы можем проверить в нескольких сервисах.

// playwright.config.js
const config = {
  reporter: 'list',
  testDir: './tests/playwright',
  snapshotPathTemplate: '{testDir}/example/{arg}.png',
};

module.exports = config;

Мы можем настроить драматурга несколькими способами, главное — указать, где находятся наши шаблоны, затем нам нужно написать наш фактический тестовый пример.

const { test, expect } = require('@playwright/test');

const BASE_URL = 'https://gov.uk/';

test.describe('visual tests', () => {
  test.beforeEach(async ({ page }) => {
    // Go to the starting url before each test.
    await page.goto(`${BASE_URL}/government/topical-events/coronation`);
    await expect(page).toHaveTitle(/Coronation - GOV.UK/);
  });

  test('should have a valid header', async ({ page }) => {
    await expect(await page.locator('header.gem-c-layout-super-navigation-header')
      .screenshot())
      .toMatchSnapshot('header-v1-desktop.png');
  });
});

Этот код загрузит страницу и сравнит компонент с установленным снимком экрана, мы можем привести пример этого, чтобы охватить варианты компонентов, разные размеры страницы.

Мы также можем сопоставить это со снимками кода — это если использование разных фреймворков может быть полезным, поскольку оно утверждает, что html создается одним и тем же способом.