From 136667cd7a2abbeac0089274f3c26f85a7a6bf12 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 20 Mar 2024 12:10:01 +0900 Subject: [PATCH 1/3] test: fix e2e --- .vscode/launch.json | 10 ++++++++++ package.json | 3 ++- pnpm-lock.yaml | 14 ++++++++++++++ test-e2e/basic.test.ts | 19 ++++++++++++------- test-e2e/helper.ts | 4 ++-- 5 files changed, 40 insertions(+), 10 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index bd0adcd6..15e937a6 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -15,6 +15,16 @@ ], "outFiles": ["${workspaceFolder}/dist/**/*.js"] }, + { + "name": "Run Extension samples/imba", + "type": "extensionHost", + "request": "launch", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "${workspaceFolder}/samples/imba" + ], + "outFiles": ["${workspaceFolder}/dist/**/*.js"] + }, { "name": "Run Extension In-Source Sample", "type": "extensionHost", diff --git a/package.json b/package.json index b8e0eddf..d07af061 100644 --- a/package.json +++ b/package.json @@ -115,6 +115,7 @@ "@antfu/eslint-config": "^2.6.4", "@babel/parser": "^7.20.15", "@babel/types": "^7.20.7", + "@playwright/test": "^1.42.1", "@rauschma/stringio": "^1.4.0", "@types/fs-extra": "^9.0.13", "@types/glob": "^7.2.0", @@ -135,6 +136,7 @@ "chai": "^5.1.0", "changelogithub": "^0.13.3", "eslint": "^8.56.0", + "execa": "^8.0.1", "fast-glob": "^3.3.2", "flatted": "^3.2.9", "fs-extra": "^10.0.1", @@ -146,7 +148,6 @@ "mocha": "^10.3.0", "pathe": "^1.1.2", "picocolors": "^1.0.0", - "playwright": "^1.42.1", "prompts": "^2.4.2", "semver": "^7.3.5", "strip-ansi": "^7.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 32b17885..2f138afa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,9 @@ devDependencies: '@babel/types': specifier: ^7.20.7 version: 7.23.9 + '@playwright/test': + specifier: ^1.42.1 + version: 1.42.1 '@rauschma/stringio': specifier: ^1.4.0 version: 1.4.0 @@ -74,6 +77,9 @@ devDependencies: eslint: specifier: ^8.56.0 version: 8.56.0 + execa: + specifier: ^8.0.1 + version: 8.0.1 fast-glob: specifier: ^3.3.2 version: 3.3.2 @@ -661,6 +667,14 @@ packages: dev: true optional: true + /@playwright/test@1.42.1: + resolution: {integrity: sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==} + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright: 1.42.1 + dev: true + /@rauschma/stringio@1.4.0: resolution: {integrity: sha512-3uor2f/MXZkmX5RJf8r+OC3WvZVzpSme0yyL0rQDPEnatE02qRcqwEwnsgpgriEck0S/n4vWtUd6tTtrJwk45Q==} dependencies: diff --git a/test-e2e/basic.test.ts b/test-e2e/basic.test.ts index fbe8e72d..a5b78d47 100644 --- a/test-e2e/basic.test.ts +++ b/test-e2e/basic.test.ts @@ -1,5 +1,7 @@ import { beforeAll } from 'vitest' import { test } from './helper' +import { execa } from "execa" +import { expect } from "@playwright/test" // Vitst extension doesn't work with CI flag beforeAll(() => { @@ -8,6 +10,7 @@ beforeAll(() => { }) test('basic', async ({ launch }) => { + await execa("pnpm", ["i"], { cwd: "./samples/e2e" }); const { page } = await launch({ workspacePath: './samples/e2e', }) @@ -23,13 +26,14 @@ test('basic', async ({ launch }) => { await page.getByRole('button', { name: 'Run Tests' }).click() // check results - await page.locator(`[title*="pass.test.ts (Passed)"]`).click() - await page.locator(`[title*="fail.test.ts (Failed)"]`).click() - await page.locator(`[title*="mix.test.ts (Failed)"]`).click() - await page.locator(`[title*="3/7 tests passed"]`).click() + await expect(page.locator(`[title*="pass.test.ts (Passed)"]`)).toBeVisible() + await expect(page.locator(`[title*="fail.test.ts (Failed)"]`)).toBeVisible() + await expect(page.locator(`[title*="mix.test.ts (Failed)"]`)).toBeVisible() + await expect(page.locator(`[title*="3/7 tests passed"]`)).toBeVisible() }) test('imba', async ({ launch }) => { + await execa("npm", ["i"], { cwd: "./samples/imba" }); const { page } = await launch({ workspacePath: './samples/imba', }) @@ -46,7 +50,8 @@ test('imba', async ({ launch }) => { await page.getByRole('button', { name: 'Run Tests' }).click() // check results - await page.locator(`[title*="basic.test.imba (Passed)"]`).click() - await page.locator(`[title*="utils.imba (Passed)"]`).click() - await page.locator(`[title*="counter.imba (Failed)"]`).click() + await expect(page.locator(`[title*="5/7 tests passed"]`)).toBeVisible() + await expect(page.locator(`[title*="basic.test.imba (Passed)"]`)).toBeVisible() + await expect(page.locator(`[title*="utils.imba (Passed)"]`)).toBeVisible() + await expect(page.locator(`[title*="counter.imba (Failed)"]`)).toBeVisible() }) diff --git a/test-e2e/helper.ts b/test-e2e/helper.ts index b7a5dcab..50f2703c 100644 --- a/test-e2e/helper.ts +++ b/test-e2e/helper.ts @@ -2,8 +2,8 @@ import fs from 'node:fs' import os from 'node:os' import path from 'node:path' import { download } from '@vscode/test-electron' -import { _electron } from 'playwright' -import type { Page } from 'playwright' +import { _electron } from '@playwright/test' +import type { Page } from '@playwright/test' import { test as baseTest } from 'vitest' // based on From aba050492077cef36e61793849999c13e5052518 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 20 Mar 2024 12:11:42 +0900 Subject: [PATCH 2/3] chore: lint --- pnpm-lock.yaml | 3 --- test-e2e/basic.test.ts | 8 ++++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2f138afa..6f1c8a9d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -113,9 +113,6 @@ devDependencies: picocolors: specifier: ^1.0.0 version: 1.0.0 - playwright: - specifier: ^1.42.1 - version: 1.42.1 prompts: specifier: ^2.4.2 version: 2.4.2 diff --git a/test-e2e/basic.test.ts b/test-e2e/basic.test.ts index a5b78d47..52b2e382 100644 --- a/test-e2e/basic.test.ts +++ b/test-e2e/basic.test.ts @@ -1,7 +1,7 @@ import { beforeAll } from 'vitest' +import { execa } from 'execa' +import { expect } from '@playwright/test' import { test } from './helper' -import { execa } from "execa" -import { expect } from "@playwright/test" // Vitst extension doesn't work with CI flag beforeAll(() => { @@ -10,7 +10,7 @@ beforeAll(() => { }) test('basic', async ({ launch }) => { - await execa("pnpm", ["i"], { cwd: "./samples/e2e" }); + await execa('pnpm', ['i'], { cwd: './samples/e2e' }) const { page } = await launch({ workspacePath: './samples/e2e', }) @@ -33,7 +33,7 @@ test('basic', async ({ launch }) => { }) test('imba', async ({ launch }) => { - await execa("npm", ["i"], { cwd: "./samples/imba" }); + await execa('npm', ['i'], { cwd: './samples/imba' }) const { page } = await launch({ workspacePath: './samples/imba', }) From 338d7902d5611798de488dc7facdf6e1d55fee05 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 20 Mar 2024 12:16:46 +0900 Subject: [PATCH 3/3] chore: comment --- test-e2e/vitest.config.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test-e2e/vitest.config.ts b/test-e2e/vitest.config.ts index 2b2d7eae..b1ffa58b 100644 --- a/test-e2e/vitest.config.ts +++ b/test-e2e/vitest.config.ts @@ -1,5 +1,11 @@ import { defineConfig } from 'vitest/config' +// to open playwright inspector either run with `PWDEBUG` +// PWDEBUG=1 pnpm test-e2e +// +// or use `page.pause` inside a test code +// await page.pase() + export default defineConfig({ test: { // use Infinity on local for `page.pause()`