From be6743cf6175c1284bf35e36078ca3c0bd76bc0f Mon Sep 17 00:00:00 2001 From: kitsuyui Date: Fri, 19 May 2023 23:44:45 +0900 Subject: [PATCH 1/8] Introduce VRT test There is a test method called Visual Regression Testing. It is a test method that takes a screenshot of the actual drawing result in the browser and compares it to detect regressions. There is a possibility that it will not work well if there are differences in the browser between the local environment and the test environment. --- examples/storybook/.gitignore | 1 + examples/storybook/package.json | 11 +++-- examples/storybook/playwright.config.ts | 43 ++++++++++++++++++ examples/storybook/stories/Clock.stories.js | 5 +- examples/storybook/tests/example.spec.ts | 6 +++ .../clock-image-chromium-darwin.png | Bin 0 -> 35463 bytes yarn.lock | 24 +++++++++- 7 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 examples/storybook/.gitignore create mode 100644 examples/storybook/playwright.config.ts create mode 100644 examples/storybook/tests/example.spec.ts create mode 100644 examples/storybook/tests/example.spec.ts-snapshots/clock-image-chromium-darwin.png diff --git a/examples/storybook/.gitignore b/examples/storybook/.gitignore new file mode 100644 index 00000000..8b4ddd0c --- /dev/null +++ b/examples/storybook/.gitignore @@ -0,0 +1 @@ +playwright-report diff --git a/examples/storybook/package.json b/examples/storybook/package.json index a9e1936a..dc297698 100644 --- a/examples/storybook/package.json +++ b/examples/storybook/package.json @@ -8,6 +8,10 @@ "@babel/preset-env": "^7.21.5", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.5", + "@kitsuyui/react-clock": "file:../../packages/clock", + "@kitsuyui/react-stopwatch": "file:../../packages/stopwatch", + "@kitsuyui/react-timer": "file:../../packages/timer", + "@playwright/test": "^1.33.0", "@storybook/addon-essentials": "^7.0.8", "@storybook/addon-interactions": "^7.0.8", "@storybook/addon-links": "^7.0.8", @@ -15,17 +19,16 @@ "@storybook/react": "^7.0.8", "@storybook/react-webpack5": "^7.0.8", "@storybook/testing-library": "^0.1.0", + "playwright": "^1.33.0", "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", - "storybook": "^7.0.8", - "@kitsuyui/react-clock": "file:../../packages/clock", - "@kitsuyui/react-timer": "file:../../packages/timer", - "@kitsuyui/react-stopwatch": "file:../../packages/stopwatch" + "storybook": "^7.0.8" }, "scripts": { "start": "storybook dev -p 6006", "storybook": "storybook dev -p 6006", + "test": "playwright test", "build-storybook": "storybook build" } } diff --git a/examples/storybook/playwright.config.ts b/examples/storybook/playwright.config.ts new file mode 100644 index 00000000..e7835890 --- /dev/null +++ b/examples/storybook/playwright.config.ts @@ -0,0 +1,43 @@ +import { defineConfig, devices } from '@playwright/test' + +// https://playwright.dev/docs/test-configuration +export default defineConfig({ + // Look for test files in the "tests" directory, relative to this configuration file. + testDir: 'tests', + + // Run all tests in parallel. + fullyParallel: true, + + // Fail the build on CI if you accidentally left test.only in the source code. + forbidOnly: !!process.env.CI, + + // Retry on CI only. + retries: process.env.CI ? 2 : 0, + + // Opt out of parallel tests on CI. + workers: process.env.CI ? 1 : undefined, + + // Reporter to use + reporter: 'html', + + use: { + // Base URL to use in actions like `await page.goto('/')`. + baseURL: 'http://127.0.0.1:3000', + + // Collect trace when retrying the failed test. + trace: 'on-first-retry', + }, + // Configure projects for major browsers. + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + // Run your local dev server before starting the tests. + webServer: { + command: 'yarn start', + url: 'http://127.0.0.1:3000', + reuseExistingServer: !process.env.CI, + }, +}) diff --git a/examples/storybook/stories/Clock.stories.js b/examples/storybook/stories/Clock.stories.js index cfa98371..859d5ffe 100644 --- a/examples/storybook/stories/Clock.stories.js +++ b/examples/storybook/stories/Clock.stories.js @@ -14,7 +14,8 @@ export default { } AnalogClock.defaultProps = { - date: new Date(), + // https://museum.seiko.co.jp/en/knowledge/trivia01/ + date: new Date('2023-01-01T10:08:42Z'), timezone: 'UTC', } @@ -22,6 +23,6 @@ const Template = (args) => export const Default = Template.bind({}) Default.args = { - date: new Date(), + date: new Date('2023-01-01T10:08:42Z'), timezone: 'UTC', } diff --git a/examples/storybook/tests/example.spec.ts b/examples/storybook/tests/example.spec.ts new file mode 100644 index 00000000..2b41a266 --- /dev/null +++ b/examples/storybook/tests/example.spec.ts @@ -0,0 +1,6 @@ +import { test, expect } from '@playwright/test' + +test('clock page', async ({ page }) => { + await page.goto('http://localhost:6006/?path=/story/clock--default') + expect(await page.screenshot()).toMatchSnapshot('clock-image.png') +}) diff --git a/examples/storybook/tests/example.spec.ts-snapshots/clock-image-chromium-darwin.png b/examples/storybook/tests/example.spec.ts-snapshots/clock-image-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..9565eaba0f380e2341c5d7b3d4918609d8b601bc GIT binary patch literal 35463 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 Date: Fri, 19 May 2023 23:55:41 +0900 Subject: [PATCH 2/8] fix port --- examples/storybook/playwright.config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/storybook/playwright.config.ts b/examples/storybook/playwright.config.ts index e7835890..1c93b100 100644 --- a/examples/storybook/playwright.config.ts +++ b/examples/storybook/playwright.config.ts @@ -22,7 +22,7 @@ export default defineConfig({ use: { // Base URL to use in actions like `await page.goto('/')`. - baseURL: 'http://127.0.0.1:3000', + baseURL: 'http://127.0.0.1:6006', // Collect trace when retrying the failed test. trace: 'on-first-retry', @@ -37,7 +37,7 @@ export default defineConfig({ // Run your local dev server before starting the tests. webServer: { command: 'yarn start', - url: 'http://127.0.0.1:3000', + url: 'http://127.0.0.1:6006', reuseExistingServer: !process.env.CI, }, }) From e72b2493b8f653ac94a5846f82470ae18a90e115 Mon Sep 17 00:00:00 2001 From: kitsuyui Date: Sat, 20 May 2023 00:18:01 +0900 Subject: [PATCH 3/8] Add CI --- .github/workflows/test-vrt.yml | 22 ++++++++++++++++++++++ examples/storybook/package.json | 2 +- package.json | 1 + turbo.json | 3 ++- 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/test-vrt.yml diff --git a/.github/workflows/test-vrt.yml b/.github/workflows/test-vrt.yml new file mode 100644 index 00000000..f67c86e8 --- /dev/null +++ b/.github/workflows/test-vrt.yml @@ -0,0 +1,22 @@ +name: test-vrt +on: push +jobs: + test: + runs-on: macos-latest + continue-on-error: true + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: latest + cache: yarn + cache-dependency-path: yarn.lock + + - name: Install dependencies + run: yarn install + + - name: Test + run: yarn build + + - name: Visual Regression Test + run: yarn test:vrt diff --git a/examples/storybook/package.json b/examples/storybook/package.json index dc297698..b9e6629f 100644 --- a/examples/storybook/package.json +++ b/examples/storybook/package.json @@ -28,7 +28,7 @@ "scripts": { "start": "storybook dev -p 6006", "storybook": "storybook dev -p 6006", - "test": "playwright test", + "test:vrt": "playwright test", "build-storybook": "storybook build" } } diff --git a/package.json b/package.json index d3be7e79..51ed39fb 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "build": "turbo build", "test": "turbo test", "lint": "turbo lint", + "test:vrt": "turbo test:vrt", "format:prettier": "prettier --write .", "format:eslint": "eslint . --ext .js,.jsx,.ts,.tsx --ignore-path .gitignore --fix", "lint:prettier": "prettier --check .", diff --git a/turbo.json b/turbo.json index 5add638e..c768e507 100644 --- a/turbo.json +++ b/turbo.json @@ -10,6 +10,7 @@ }, "test": { "dependsOn": ["^test"] - } + }, + "test:vrt": {} } } From 73c83f119657189b6e8678bae07c5f9c51249452 Mon Sep 17 00:00:00 2001 From: kitsuyui Date: Sat, 20 May 2023 12:09:27 +0900 Subject: [PATCH 4/8] Upload failure report --- .github/workflows/test-vrt.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/test-vrt.yml b/.github/workflows/test-vrt.yml index f67c86e8..93186652 100644 --- a/.github/workflows/test-vrt.yml +++ b/.github/workflows/test-vrt.yml @@ -20,3 +20,10 @@ jobs: - name: Visual Regression Test run: yarn test:vrt + + - uses: actions/upload-artifact@v2 + if: failure() + with: + name: playwright-report + path: examples/storybook/playwright-report/ + retention-days: 1 From 26bf740d3b815be0a226a18afd588c9651ad1de3 Mon Sep 17 00:00:00 2001 From: kitsuyui Date: Sat, 20 May 2023 12:23:05 +0900 Subject: [PATCH 5/8] Update VRT settings --- examples/storybook/playwright.config.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/examples/storybook/playwright.config.ts b/examples/storybook/playwright.config.ts index 1c93b100..1a05e06e 100644 --- a/examples/storybook/playwright.config.ts +++ b/examples/storybook/playwright.config.ts @@ -20,6 +20,21 @@ export default defineConfig({ // Reporter to use reporter: 'html', + expect: { + // Maximum time expect() should wait for the condition to be met. + timeout: 5000, + + toHaveScreenshot: { + // An acceptable amount of pixels that could be different, unset by default. + maxDiffPixels: 10, + }, + + toMatchSnapshot: { + // An acceptable ratio of pixels that are different to the total amount of pixels, between 0 and 1. + maxDiffPixelRatio: 0.1, + }, + }, + use: { // Base URL to use in actions like `await page.goto('/')`. baseURL: 'http://127.0.0.1:6006', From 2ba32147a124bfea63dc01328c5135a103a836d3 Mon Sep 17 00:00:00 2001 From: kitsuyui Date: Sat, 20 May 2023 12:29:38 +0900 Subject: [PATCH 6/8] reduce diff pixels --- examples/storybook/playwright.config.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/storybook/playwright.config.ts b/examples/storybook/playwright.config.ts index 1a05e06e..e49e1f05 100644 --- a/examples/storybook/playwright.config.ts +++ b/examples/storybook/playwright.config.ts @@ -24,15 +24,15 @@ export default defineConfig({ // Maximum time expect() should wait for the condition to be met. timeout: 5000, - toHaveScreenshot: { - // An acceptable amount of pixels that could be different, unset by default. - maxDiffPixels: 10, - }, - - toMatchSnapshot: { - // An acceptable ratio of pixels that are different to the total amount of pixels, between 0 and 1. - maxDiffPixelRatio: 0.1, - }, + // toHaveScreenshot: { + // // An acceptable amount of pixels that could be different, unset by default. + // maxDiffPixels: 1, + // }, + + // toMatchSnapshot: { + // // An acceptable ratio of pixels that are different to the total amount of pixels, between 0 and 1. + // maxDiffPixelRatio: 0.0125, + // }, }, use: { From 5b242a27b765d5778d2237770b0f36549328db2e Mon Sep 17 00:00:00 2001 From: kitsuyui Date: Sat, 20 May 2023 13:06:35 +0900 Subject: [PATCH 7/8] wait for storybook iframe loaded --- examples/storybook/tests/example.spec.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/storybook/tests/example.spec.ts b/examples/storybook/tests/example.spec.ts index 2b41a266..33124bb7 100644 --- a/examples/storybook/tests/example.spec.ts +++ b/examples/storybook/tests/example.spec.ts @@ -2,5 +2,6 @@ import { test, expect } from '@playwright/test' test('clock page', async ({ page }) => { await page.goto('http://localhost:6006/?path=/story/clock--default') + await page.waitForSelector('iframe[data-is-loaded="true"]') expect(await page.screenshot()).toMatchSnapshot('clock-image.png') }) From 65103084bfb2a3efbdbe5390d499b34de9d1511c Mon Sep 17 00:00:00 2001 From: kitsuyui Date: Sat, 20 May 2023 13:19:18 +0900 Subject: [PATCH 8/8] Take a screenshot only inside the iframe --- examples/storybook/tests/example.spec.ts | 5 ++++- .../clock-image-chromium-darwin.png | Bin 35463 -> 7780 bytes 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/storybook/tests/example.spec.ts b/examples/storybook/tests/example.spec.ts index 33124bb7..9f60ef39 100644 --- a/examples/storybook/tests/example.spec.ts +++ b/examples/storybook/tests/example.spec.ts @@ -3,5 +3,8 @@ import { test, expect } from '@playwright/test' test('clock page', async ({ page }) => { await page.goto('http://localhost:6006/?path=/story/clock--default') await page.waitForSelector('iframe[data-is-loaded="true"]') - expect(await page.screenshot()).toMatchSnapshot('clock-image.png') + const screenshot = await page + .locator('#storybook-preview-iframe') + .screenshot() + expect(screenshot).toMatchSnapshot('clock-image.png') }) diff --git a/examples/storybook/tests/example.spec.ts-snapshots/clock-image-chromium-darwin.png b/examples/storybook/tests/example.spec.ts-snapshots/clock-image-chromium-darwin.png index 9565eaba0f380e2341c5d7b3d4918609d8b601bc..d1615d1650f9956fe0c5a2c2f1f2cfa04f5067d6 100644 GIT binary patch literal 7780 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 OVosT#%sz4H_CEpW+x4&j literal 35463 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