From bdba288ff16dc4174b9f359e58acc2ebe8f40449 Mon Sep 17 00:00:00 2001 From: Aria Minaei Date: Mon, 7 Aug 2023 15:34:36 +0200 Subject: [PATCH] Remove percy and add docs on how to produce the snapshots --- .github/workflows/ci.yml | 8 +- packages/playground/README.md | 14 +- packages/playground/package.json | 2 - .../tests/setting-static-props/test.e2e.ts | 5 +- ...atic-props-Undo-redo-1-chromium-darwin.png | Bin 0 -> 19550 bytes ...tatic-props-Undo-redo-1-chromium-linux.png | Bin 0 -> 18720 bytes yarn.lock | 331 +----------------- 7 files changed, 32 insertions(+), 328 deletions(-) create mode 100644 packages/playground/src/tests/setting-static-props/test.e2e.ts-snapshots/setting-static-props-Undo-redo-1-chromium-darwin.png create mode 100644 packages/playground/src/tests/setting-static-props/test.e2e.ts-snapshots/setting-static-props-Undo-redo-1-chromium-linux.png diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5b32f68..5ea7039 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -88,12 +88,8 @@ jobs: node-version: ${{ matrix.node-version }} - uses: ./.github/actions/yarn-nm-install - - name: Run e2e tests with percy - uses: percy/exec-action@v0.3.1 - with: - custom-command: 'yarn test:e2e:ci' - env: - PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }} + - name: Run e2e tests + run: yarn test:e2e:ci Compatibility-Tests: runs-on: ubuntu-latest diff --git a/packages/playground/README.md b/packages/playground/README.md index 6e6ad76..4c919c1 100644 --- a/packages/playground/README.md +++ b/packages/playground/README.md @@ -53,6 +53,16 @@ $ yarn playwright codegen http://localhost:8080/tests/[playground-name] # run th ## Visual regression testing -We're currently using [percy](https://percy.io) for visual regression testing. These tests run only the the [CI](../../.github/workflows/main.yml) using [Github actions](https://github.com/theatre-js/theatre/actions). Look at the example at [`src/tests/setting-static-props/test.e2e.ts`](src/tests/setting-static-props/test.e2e.ts) for an example of recording and diffing a screenshot. +Some `.e2e.ts` files also contain visual regression tetst. These tests run only the the [CI](../../.github/workflows/main.yml) using [Github actions](https://github.com/theatre-js/theatre/actions). Look at the example at [`src/tests/setting-static-props/test.e2e.ts`](src/tests/setting-static-props/test.e2e.ts) for an example of recording and diffing a screenshot. -Please note that we haven't figured out the best practices for visual regression testing yet, so if the setup isn't optimal, please let us know. +Note that CI runs the visual regression tests in a linux VM, which is bound to produce a slightly different screenshot than a browser on Mac/Windows. Because of that, we have a `docker-compose.yml` file at the root of the repo which you can use to produce a screenshot in a linux vm. Here is how you can use it: + +```bash +$ cd repo +$ docker-compose up -d # start the linux vm +$ docker-compose exec -it node bash # ssh into the vm +$ yarn +$ yarn test:e2e:ci +``` + +If you're submitting a PR that breaks the visual regression tests and you're not familiar with Docker, simply ask the mainainers to update the screenshots for you. \ No newline at end of file diff --git a/packages/playground/package.json b/packages/playground/package.json index a7007ce..4dc4e97 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -17,8 +17,6 @@ "test:ci": "playwright test --reporter=dot --config=devEnv/playwright.config.ts --project=chromium" }, "devDependencies": { - "@percy/cli": "^1.16.0", - "@percy/playwright": "^1.0.4", "@playwright/test": "^1.36.2", "@react-three/drei": "^9.80.1", "@react-three/fiber": "^8.13.6", diff --git a/packages/playground/src/tests/setting-static-props/test.e2e.ts b/packages/playground/src/tests/setting-static-props/test.e2e.ts index ce2933f..d537d51 100644 --- a/packages/playground/src/tests/setting-static-props/test.e2e.ts +++ b/packages/playground/src/tests/setting-static-props/test.e2e.ts @@ -1,5 +1,4 @@ import {test, expect} from '@playwright/test' -import percySnapshot from '@percy/playwright' const isMac = process.platform === 'darwin' @@ -43,8 +42,6 @@ test.describe('setting-static-props', () => { await expect(firstInput).toHaveAttribute('value', '1') await expect(secondInput).toHaveAttribute('value', '2') - // Our first visual regression test - // @ts-ignore - probably percy uses a different version of playwright - await percySnapshot(page, test.info().titlePath.join('/') + '/After redo') + await expect(page).toHaveScreenshot() }) }) diff --git a/packages/playground/src/tests/setting-static-props/test.e2e.ts-snapshots/setting-static-props-Undo-redo-1-chromium-darwin.png b/packages/playground/src/tests/setting-static-props/test.e2e.ts-snapshots/setting-static-props-Undo-redo-1-chromium-darwin.png new file mode 100644 index 0000000000000000000000000000000000000000..c4cc46441a2b9143117c44467013fe31b4d38822 GIT binary patch literal 19550 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�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" - checksum: d0969b49208178a7221093517b50b5cee1e3094b89be301dc5f194172f4132b601570a89bdad617830dcfce7599cdbbe23cef4398bc58faeec05ef7b1f222802 - languageName: node - linkType: hard - -"@percy/sdk-utils@npm:^1.0.0": - version: 1.3.0 - resolution: "@percy/sdk-utils@npm:1.3.0" - checksum: 0d3fb3b452c3e008a23a80339b345540b0cfdab6a2db8214f4f72fa38b93806fd9c3dabfaea9bbf09183dee1cfceb4b932055b332bbd517dcdec5204a8f64689 - languageName: node - linkType: hard - "@playwright/test@npm:^1.36.2": version: 1.36.2 resolution: "@playwright/test@npm:1.36.2" @@ -8934,15 +8760,6 @@ __metadata: languageName: node linkType: hard -"@types/yauzl@npm:^2.9.1": - version: 2.9.2 - resolution: "@types/yauzl@npm:2.9.2" - dependencies: - "@types/node": "*" - checksum: dfb49abe82605615712fc694eaa4f7068fe30aa03f38c085e2c2e74408beaad30471d36da9654a811482ece2ea4405575fd99b19c0aa327ed2a9736b554bbf43 - languageName: node - linkType: hard - "@typescript-eslint/eslint-plugin@npm:^4.5.0": version: 4.29.0 resolution: "@typescript-eslint/eslint-plugin@npm:4.29.0" @@ -10313,18 +10130,6 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.6.2": - version: 8.10.0 - resolution: "ajv@npm:8.10.0" - dependencies: - fast-deep-equal: ^3.1.1 - json-schema-traverse: ^1.0.0 - require-from-string: ^2.0.2 - uri-js: ^4.2.2 - checksum: 3594728ef1e31219ef97bfacb203d0d72db8ad5c35d6d0578e38ee453e4537c2bf927dad144bb84b0c893f661d71b58337d4643e8ee2f2a6e1d63b041c92fe82 - languageName: node - linkType: hard - "alphanum-sort@npm:^1.0.0": version: 1.0.2 resolution: "alphanum-sort@npm:1.0.2" @@ -12064,13 +11869,6 @@ __metadata: languageName: node linkType: hard -"buffer-crc32@npm:~0.2.3": - version: 0.2.13 - resolution: "buffer-crc32@npm:0.2.13" - checksum: 06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c - languageName: node - linkType: hard - "buffer-equal-constant-time@npm:1.0.1": version: 1.0.1 resolution: "buffer-equal-constant-time@npm:1.0.1" @@ -13115,7 +12913,7 @@ __metadata: languageName: node linkType: hard -"content-disposition@npm:0.5.4, content-disposition@npm:^0.5.4": +"content-disposition@npm:0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" dependencies: @@ -17256,23 +17054,6 @@ __metadata: languageName: node linkType: hard -"extract-zip@npm:^2.0.1": - version: 2.0.1 - resolution: "extract-zip@npm:2.0.1" - dependencies: - "@types/yauzl": ^2.9.1 - debug: ^4.1.1 - get-stream: ^5.1.0 - yauzl: ^2.10.0 - dependenciesMeta: - "@types/yauzl": - optional: true - bin: - extract-zip: cli.js - checksum: 8cbda9debdd6d6980819cc69734d874ddd71051c9fe5bde1ef307ebcedfe949ba57b004894b585f758b7c9eeeea0e3d87f2dda89b7d25320459c2c9643ebb635 - languageName: node - linkType: hard - "extsprintf@npm:1.3.0": version: 1.3.0 resolution: "extsprintf@npm:1.3.0" @@ -17436,15 +17217,6 @@ __metadata: languageName: node linkType: hard -"fd-slicer@npm:~1.1.0": - version: 1.1.0 - resolution: "fd-slicer@npm:1.1.0" - dependencies: - pend: ~1.2.0 - checksum: c8585fd5713f4476eb8261150900d2cb7f6ff2d87f8feb306ccc8a1122efd152f1783bdb2b8dc891395744583436bfd8081d8e63ece0ec8687eeefea394d4ff2 - languageName: node - linkType: hard - "fetch-blob@npm:^3.1.2, fetch-blob@npm:^3.1.4": version: 3.1.5 resolution: "fetch-blob@npm:3.1.5" @@ -18082,7 +17854,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": +"get-stream@npm:^5.0.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" dependencies: @@ -19230,17 +19002,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"image-size@npm:^1.0.0": - version: 1.0.1 - resolution: "image-size@npm:1.0.1" - dependencies: - queue: 6.0.2 - bin: - image-size: bin/image-size.js - checksum: ffa74672dc7a1b6529c66255adbfe4e7865408004db88ed100855816f03175494ec21ef9dad199b8685b5b194996ebe83ab27803af152adb66a301172fdd622d - languageName: node - linkType: hard - "immediate@npm:~3.0.5": version: 3.0.6 resolution: "immediate@npm:3.0.6" @@ -23205,13 +22966,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"mime-db@npm:1.51.0": - version: 1.51.0 - resolution: "mime-db@npm:1.51.0" - checksum: 613b1ac9d6e725cc24444600b124a7f1ce6c60b1baa654f39a3e260d0995a6dffc5693190217e271af7e2a5612dae19f2a73f3e316707d797a7391165f7ef423 - languageName: node - linkType: hard - "mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -23237,15 +22991,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"mime-types@npm:^2.1.34": - version: 2.1.34 - resolution: "mime-types@npm:2.1.34" - dependencies: - mime-db: 1.51.0 - checksum: 67013de9e9d6799bde6d669d18785b7e18bcd212e710d3e04a4727f92f67a8ad4e74aee24be28b685adb794944814bde649119b58ee3282ffdbee58f9278d9f3 - languageName: node - linkType: hard - "mime-types@npm:~2.1.17, mime-types@npm:~2.1.24": version: 2.1.32 resolution: "mime-types@npm:2.1.32" @@ -25035,13 +24780,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"path-to-regexp@npm:^6.2.0": - version: 6.2.0 - resolution: "path-to-regexp@npm:6.2.0" - checksum: a6aca74d2d6e2e7594d812f653cf85e9cb5054d3a8d80f099722a44ef6ad22639b02078e5ea83d11db16321c3e4359e3f1ab0274fa78dad0754a6e53f630b0fc - languageName: node - linkType: hard - "path-type@npm:^3.0.0": version: 3.0.0 resolution: "path-type@npm:3.0.0" @@ -25071,13 +24809,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"pend@npm:~1.2.0": - version: 1.2.0 - resolution: "pend@npm:1.2.0" - checksum: 6c72f5243303d9c60bd98e6446ba7d30ae29e3d56fdb6fae8767e8ba6386f33ee284c97efe3230a0d0217e2b1723b8ab490b1bbf34fcbb2180dbc8a9de47850d - languageName: node - linkType: hard - "performance-now@npm:^2.1.0": version: 2.1.0 resolution: "performance-now@npm:2.1.0" @@ -25302,8 +25033,6 @@ fsevents@^1.2.7: version: 0.0.0-use.local resolution: "playground@workspace:packages/playground" dependencies: - "@percy/cli": ^1.16.0 - "@percy/playwright": ^1.0.4 "@playwright/test": ^1.36.2 "@react-three/drei": ^9.80.1 "@react-three/fiber": ^8.13.6 @@ -27611,15 +27340,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"queue@npm:6.0.2": - version: 6.0.2 - resolution: "queue@npm:6.0.2" - dependencies: - inherits: ~2.0.3 - checksum: ebc23639248e4fe40a789f713c20548e513e053b3dc4924b6cb0ad741e3f264dcff948225c8737834dd4f9ec286dbc06a1a7c13858ea382d9379f4303bcc0916 - languageName: node - linkType: hard - "quick-format-unescaped@npm:^4.0.3": version: 4.0.4 resolution: "quick-format-unescaped@npm:4.0.4" @@ -34098,21 +33818,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"ws@npm:^8.0.0, ws@npm:^8.4.2": - version: 8.5.0 - resolution: "ws@npm:8.5.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 76f2f90e40344bf18fd544194e7067812fb1372b2a37865678d8f12afe4b478ff2ebc0c7c0aff82cd5e6b66fc43d889eec0f1865c2365d8f7a66d92da7744a77 - languageName: node - linkType: hard - "ws@npm:^8.11.0": version: 8.11.0 resolution: "ws@npm:8.11.0" @@ -34128,6 +33833,21 @@ fsevents@^1.2.7: languageName: node linkType: hard +"ws@npm:^8.4.2": + version: 8.5.0 + resolution: "ws@npm:8.5.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 76f2f90e40344bf18fd544194e7067812fb1372b2a37865678d8f12afe4b478ff2ebc0c7c0aff82cd5e6b66fc43d889eec0f1865c2365d8f7a66d92da7744a77 + languageName: node + linkType: hard + "xml-name-validator@npm:^3.0.0": version: 3.0.0 resolution: "xml-name-validator@npm:3.0.0" @@ -34191,13 +33911,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"yaml@npm:^2.0.0": - version: 2.1.0 - resolution: "yaml@npm:2.1.0" - checksum: 59323a8b51b10d9ad0eab951e7a1f315f1076c123b08ffe60441add1df4fa3433b1d5783b21c50a65536e9d853b23fa567921dbd4bc0d711be2dbf14a06be03b - languageName: node - linkType: hard - "yaml@npm:^2.0.1": version: 2.1.3 resolution: "yaml@npm:2.1.3" @@ -34320,16 +34033,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"yauzl@npm:^2.10.0": - version: 2.10.0 - resolution: "yauzl@npm:2.10.0" - dependencies: - buffer-crc32: ~0.2.3 - fd-slicer: ~1.1.0 - checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b - languageName: node - linkType: hard - "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0"