From c3407e60333bb472aab498acd210d0893abccaf3 Mon Sep 17 00:00:00 2001 From: Benny Powers Date: Wed, 3 Jun 2026 00:04:43 +0300 Subject: [PATCH 1/3] test(test-runner): migrate integration tests from mocha/chai to node:test Migrate the shared integration test framework and all three browser launcher test wrappers (chrome, playwright, puppeteer) from mocha/chai to node:test/node:assert/strict. Changes: - integration/test-runner: chai assertions to node:assert, mocha globals to node:test imports, `__dirname` to `import.meta.dirname`, internal imports use .ts extension for strip-types - test-runner-chrome: this.timeout to describe options, src -> dist imports, integration import uses .ts extension - test-runner-playwright: same as chrome - test-runner-puppeteer: same as chrome - All test scripts: mocha -> node --experimental-strip-types --test No published code changes. All packages' src/ directories are untouched. Assisted-By: Claude Opus 4.6 (1M context) --- integration/test-runner/index.ts | 17 +- integration/test-runner/package.json | 5 +- .../test-runner/tests/basic/runBasicTest.ts | 41 +++-- .../config-groups/runConfigGroupsTest.ts | 12 +- .../test-runner/tests/focus/runFocusTest.ts | 10 +- .../location-change/runLocationChangeTest.ts | 59 +++--- .../test-runner/tests/many/runManyTests.ts | 5 +- .../tests/parallel/runParallelTest.ts | 7 +- .../tests/test-failure/runTestFailureTest.ts | 174 ++++++++++-------- packages/test-runner-chrome/package.json | 4 +- .../test/chromeLauncher.test.ts | 9 +- packages/test-runner-playwright/package.json | 4 +- .../test/playwrightLauncher.test.ts | 22 +-- packages/test-runner-puppeteer/package.json | 4 +- .../test/puppeteerLauncher.test.ts | 9 +- 15 files changed, 200 insertions(+), 182 deletions(-) diff --git a/integration/test-runner/index.ts b/integration/test-runner/index.ts index c6fe56365c..8cdb7a95ec 100644 --- a/integration/test-runner/index.ts +++ b/integration/test-runner/index.ts @@ -1,11 +1,12 @@ -import { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; -import { runBasicTest } from './tests/basic/runBasicTest.js'; -import { runConfigGroupsTest } from './tests/config-groups/runConfigGroupsTest.js'; -import { runParallelTest } from './tests/parallel/runParallelTest.js'; -import { runTestFailureTest } from './tests/test-failure/runTestFailureTest.js'; -import { runLocationChangeTest } from './tests/location-change/runLocationChangeTest.js'; -import { runFocusTest } from './tests/focus/runFocusTest.js'; -import { runManyTests } from './tests/many/runManyTests.js'; +import { describe } from 'node:test'; +import type { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; +import { runBasicTest } from './tests/basic/runBasicTest.ts'; +import { runConfigGroupsTest } from './tests/config-groups/runConfigGroupsTest.ts'; +import { runParallelTest } from './tests/parallel/runParallelTest.ts'; +import { runTestFailureTest } from './tests/test-failure/runTestFailureTest.ts'; +import { runLocationChangeTest } from './tests/location-change/runLocationChangeTest.ts'; +import { runFocusTest } from './tests/focus/runFocusTest.ts'; +import { runManyTests } from './tests/many/runManyTests.ts'; export interface Tests { basic: boolean; diff --git a/integration/test-runner/package.json b/integration/test-runner/package.json index 7d1dd86a9c..a7c7e0e26d 100644 --- a/integration/test-runner/package.json +++ b/integration/test-runner/package.json @@ -16,8 +16,9 @@ "homepage": "https://github.com/modernweb-dev/web/tree/master/packages/test-runner-integration-tests", "main": "index.js", "scripts": { - "test": "mocha test/**/*.test.ts --require ts-node/register --reporter dot", - "test:watch": "mocha test/**/*.test.ts --require ts-node/register --watch --watch-files src,test --reporter dot" + "test": "node --experimental-strip-types --test --test-force-exit \"test/**/*.test.ts\"", + "test:node": "node --experimental-strip-types --test --test-force-exit \"test/**/*.test.ts\"", + "test:watch": "node --experimental-strip-types --test --test-force-exit --watch \"test/**/*.test.ts\"" }, "dependencies": { "@web/dev-server-legacy": "^2.1.0", diff --git a/integration/test-runner/tests/basic/runBasicTest.ts b/integration/test-runner/tests/basic/runBasicTest.ts index ce9d9c4b11..4e95f18c1e 100644 --- a/integration/test-runner/tests/basic/runBasicTest.ts +++ b/integration/test-runner/tests/basic/runBasicTest.ts @@ -1,8 +1,9 @@ -import { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core'; +import assert from 'node:assert/strict'; +import { describe, before, it } from 'node:test'; +import type { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core'; import { runTests } from '@web/test-runner-core/test-helpers'; import { legacyPlugin } from '@web/dev-server-legacy'; import { resolve } from 'path'; -import { expect } from 'chai'; export function runBasicTest( config: Partial & { browsers: BrowserLauncher[] }, @@ -14,36 +15,34 @@ export function runBasicTest( before(async () => { const result = await runTests({ ...config, - files: [...(config.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')], + files: [...(config.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], plugins: [...(config.plugins ?? []), legacyPlugin()], }); allSessions = result.sessions; - expect(allSessions.every(s => s.passed)).to.equal(true, 'All sessions should have passed'); + assert.equal(allSessions.every(s => s.passed), true, 'All sessions should have passed'); }); it('passes basic test', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('basic.test.js')); - expect(sessions.length === browserCount).to.equal( - true, - 'Each browser should run basic.test.js', - ); + assert.equal(sessions.length === browserCount, true, 'Each browser should run basic.test.js'); for (const session of sessions) { - expect(session.testResults!.tests.length).to.equal(0); - expect(session.testResults!.suites.length).to.equal(1); - expect(session.testResults!.suites[0].tests.length).to.equal(1); - expect(session.testResults!.suites[0].tests.map(t => t.name)).to.eql(['works']); + assert.equal(session.testResults!.tests.length, 0); + assert.equal(session.testResults!.suites.length, 1); + assert.equal(session.testResults!.suites[0].tests.length, 1); + assert.deepEqual(session.testResults!.suites[0].tests.map(t => t.name), ['works']); } }); it('passes js-syntax test', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('js-syntax.test.js')); - expect(sessions.length === browserCount).to.equal( + assert.equal( + sessions.length === browserCount, true, 'Each browser should run js-syntax.test.js', ); for (const session of sessions) { - expect(session.testResults!.tests.map(t => t.name)).to.eql([ + assert.deepEqual(session.testResults!.tests.map(t => t.name), [ 'supports object spread', 'supports async functions', 'supports exponentiation', @@ -57,12 +56,13 @@ export function runBasicTest( it('passes module-features test', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('module-features.test.js')); - expect(sessions.length === browserCount).to.equal( + assert.equal( + sessions.length === browserCount, true, 'Each browser should run module-features.test.js', ); for (const session of sessions) { - expect(session.testResults!.tests.map(t => t.name)).to.eql([ + assert.deepEqual(session.testResults!.tests.map(t => t.name), [ 'supports static imports', 'supports dynamic imports', 'supports import meta', @@ -72,14 +72,15 @@ export function runBasicTest( it('passes timers test', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('timers.test.js')); - expect(sessions.length === browserCount).to.equal( + assert.equal( + sessions.length === browserCount, true, 'Each browser should run timers.test.js', ); for (const session of sessions) { - expect(session.testResults!.tests.length).to.equal(0); - expect(session.testResults!.suites.length).to.equal(1); - expect(session.testResults!.suites[0].tests.map(t => t.name)).to.eql([ + assert.equal(session.testResults!.tests.length, 0); + assert.equal(session.testResults!.suites.length, 1); + assert.deepEqual(session.testResults!.suites[0].tests.map(t => t.name), [ 'can call setTimeout', 'can cancel setTimeout', 'can call and cancel setInterval', diff --git a/integration/test-runner/tests/config-groups/runConfigGroupsTest.ts b/integration/test-runner/tests/config-groups/runConfigGroupsTest.ts index 0e8b0aec1b..ddd1171bf7 100644 --- a/integration/test-runner/tests/config-groups/runConfigGroupsTest.ts +++ b/integration/test-runner/tests/config-groups/runConfigGroupsTest.ts @@ -1,4 +1,6 @@ -import { +import assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; +import type { BrowserLauncher, TestRunnerCoreConfig, TestRunnerGroupConfig, @@ -6,7 +8,6 @@ import { import { runTests } from '@web/test-runner-core/test-helpers'; import { legacyPlugin } from '@web/dev-server-legacy'; import { resolve } from 'path'; -import { expect } from 'chai'; export function runConfigGroupsTest( config: Partial & { browsers: BrowserLauncher[] }, @@ -18,13 +19,13 @@ export function runConfigGroupsTest( name: 'a', testRunnerHtml: path => ``, - files: [resolve(__dirname, 'browser-tests', 'test-runner-html-a.test.js')], + files: [resolve(import.meta.dirname, 'browser-tests', 'test-runner-html-a.test.js')], }, { name: 'b', testRunnerHtml: path => ``, - files: [resolve(__dirname, 'browser-tests', 'test-runner-html-b.test.js')], + files: [resolve(import.meta.dirname, 'browser-tests', 'test-runner-html-b.test.js')], }, ]; const result = await runTests( @@ -35,7 +36,8 @@ export function runConfigGroupsTest( groupConfigs, ); - expect(result.sessions.every(s => s.passed)).to.equal( + assert.equal( + result.sessions.every(s => s.passed), true, 'All sessions should have passed', ); diff --git a/integration/test-runner/tests/focus/runFocusTest.ts b/integration/test-runner/tests/focus/runFocusTest.ts index f32b5247d4..3c98f5a0a5 100644 --- a/integration/test-runner/tests/focus/runFocusTest.ts +++ b/integration/test-runner/tests/focus/runFocusTest.ts @@ -1,8 +1,9 @@ -import { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core'; +import assert from 'node:assert/strict'; +import { describe, before, it } from 'node:test'; +import type { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core'; import { runTests } from '@web/test-runner-core/test-helpers'; import { legacyPlugin } from '@web/dev-server-legacy'; import { resolve } from 'path'; -import { expect } from 'chai'; export function runFocusTest( config: Partial & { browsers: BrowserLauncher[] }, @@ -13,16 +14,15 @@ export function runFocusTest( before(async () => { const result = await runTests({ ...config, - // 2 means some are executed concurrently, and some sequentially concurrency: 2, - files: [...(config.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')], + files: [...(config.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], plugins: [...(config.plugins ?? []), legacyPlugin()], }); allSessions = result.sessions; }); it.skip('can run tests with focus, concurrently and sequentially', () => { - expect(allSessions.every(s => s.passed)).to.equal(true, 'All sessions should have passed'); + assert.equal(allSessions.every(s => s.passed), true, 'All sessions should have passed'); }); }); } diff --git a/integration/test-runner/tests/location-change/runLocationChangeTest.ts b/integration/test-runner/tests/location-change/runLocationChangeTest.ts index 820ffff69c..f3b9ca2a19 100644 --- a/integration/test-runner/tests/location-change/runLocationChangeTest.ts +++ b/integration/test-runner/tests/location-change/runLocationChangeTest.ts @@ -1,8 +1,9 @@ -import { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core'; +import assert from 'node:assert/strict'; +import { describe, before, it } from 'node:test'; +import type { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core'; import { runTests } from '@web/test-runner-core/test-helpers'; import { legacyPlugin } from '@web/dev-server-legacy'; import { resolve } from 'path'; -import { expect } from 'chai'; export function runLocationChangeTest( config: Partial & { browsers: BrowserLauncher[] }, @@ -15,7 +16,7 @@ export function runLocationChangeTest( const result = await runTests( { ...config, - files: [...(config.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')], + files: [...(config.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], plugins: [...(config.plugins ?? []), legacyPlugin()], }, undefined, @@ -23,32 +24,36 @@ export function runLocationChangeTest( ); allSessions = result.sessions; - expect(allSessions.every(s => s.passed)).to.equal(false, 'All sessions should have failed'); + assert.equal(allSessions.every(s => s.passed), false, 'All sessions should have failed'); }); it('handles tests which assign to window.location.href', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-location-href.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults).to.equal(undefined); - expect(session.logs).to.eql([]); - expect(session.errors.length).to.equal(1); - expect(session.errors[0].message).to.include( - 'Tests were interrupted because the page navigated to', + assert.equal(session.testResults, undefined); + assert.deepEqual(session.logs, []); + assert.equal(session.errors.length, 1); + assert.ok( + session.errors[0].message.includes( + 'Tests were interrupted because the page navigated to', + ), ); - expect(session.errors[0].message).to.include( - 'This can happen when clicking a link, submitting a form or interacting with window.location.', + assert.ok( + session.errors[0].message.includes( + 'This can happen when clicking a link, submitting a form or interacting with window.location.', + ), ); } }); it('handles tests which call window.location.reload()', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-location-reload.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults).to.equal(undefined); - expect(session.logs).to.eql([]); - expect(session.errors).to.eql([ + assert.equal(session.testResults, undefined); + assert.deepEqual(session.logs, []); + assert.deepEqual(session.errors, [ { message: 'Tests were interrupted because the page was reloaded. This can happen when clicking a link, submitting a form or interacting with window.location.', @@ -61,17 +66,21 @@ export function runLocationChangeTest( const sessions = allSessions.filter(s => s.testFile.endsWith('fail-location-replace.test.js'), ); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults).to.equal(undefined); - expect(session.logs).to.eql([]); - expect(session.errors.length).to.equal(1); - expect(session.errors[0].message).to.include( - 'Tests were interrupted because the page navigated to', + assert.equal(session.testResults, undefined); + assert.deepEqual(session.logs, []); + assert.equal(session.errors.length, 1); + assert.ok( + session.errors[0].message.includes( + 'Tests were interrupted because the page navigated to', + ), ); - expect(session.errors[0].message).to.include('/new-page/'); - expect(session.errors[0].message).to.include( - 'This can happen when clicking a link, submitting a form or interacting with window.location.', + assert.ok(session.errors[0].message.includes('/new-page/')); + assert.ok( + session.errors[0].message.includes( + 'This can happen when clicking a link, submitting a form or interacting with window.location.', + ), ); } }); diff --git a/integration/test-runner/tests/many/runManyTests.ts b/integration/test-runner/tests/many/runManyTests.ts index 6ef326bc5c..0cb5c68cb3 100644 --- a/integration/test-runner/tests/many/runManyTests.ts +++ b/integration/test-runner/tests/many/runManyTests.ts @@ -1,4 +1,5 @@ -import { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; +import { describe, it } from 'node:test'; +import type { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; import { runTests } from '@web/test-runner-core/test-helpers'; import { legacyPlugin } from '@web/dev-server-legacy'; import { resolve } from 'path'; @@ -11,7 +12,7 @@ export function runManyTests( await Promise.all([ runTests({ ...config, - files: [...(config.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')], + files: [...(config.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], plugins: [...(config.plugins ?? []), legacyPlugin()], }), ]); diff --git a/integration/test-runner/tests/parallel/runParallelTest.ts b/integration/test-runner/tests/parallel/runParallelTest.ts index 244d8ad766..dc22f853f3 100644 --- a/integration/test-runner/tests/parallel/runParallelTest.ts +++ b/integration/test-runner/tests/parallel/runParallelTest.ts @@ -1,4 +1,5 @@ -import { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; +import { describe, it } from 'node:test'; +import type { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; import { runTests } from '@web/test-runner-core/test-helpers'; import { legacyPlugin } from '@web/dev-server-legacy'; import { resolve } from 'path'; @@ -14,13 +15,13 @@ export function runParallelTest( await Promise.all([ runTests({ ...configA, - files: [...(configA.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')], + files: [...(configA.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], plugins: [...(configA.plugins ?? []), legacyPlugin()], }), runTests({ ...configB, - files: [...(configB.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')], + files: [...(configB.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], plugins: [...(configB.plugins ?? []), legacyPlugin()], }), ]); diff --git a/integration/test-runner/tests/test-failure/runTestFailureTest.ts b/integration/test-runner/tests/test-failure/runTestFailureTest.ts index 85be1a0c24..5a1d7f9005 100644 --- a/integration/test-runner/tests/test-failure/runTestFailureTest.ts +++ b/integration/test-runner/tests/test-failure/runTestFailureTest.ts @@ -1,8 +1,9 @@ -import { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core'; +import assert from 'node:assert/strict'; +import { describe, before, it } from 'node:test'; +import type { BrowserLauncher, TestRunnerCoreConfig, TestSession } from '@web/test-runner-core'; import { runTests } from '@web/test-runner-core/test-helpers'; import { legacyPlugin } from '@web/dev-server-legacy'; import { resolve, sep } from 'path'; -import { expect } from 'chai'; const ERROR_NOT_IMPORTABLE = { message: @@ -34,7 +35,7 @@ export function runTestFailureTest( const result = await runTests( { ...config, - files: [...(config.files ?? []), resolve(__dirname, 'browser-tests', '*.test.js')], + files: [...(config.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], plugins: [...(config.plugins ?? []), legacyPlugin()], }, undefined, @@ -42,31 +43,32 @@ export function runTestFailureTest( ); allSessions = result.sessions; - expect(allSessions.every(s => s.passed)).to.equal(false, 'All sessions should have failed'); + assert.equal(allSessions.every(s => s.passed), false, 'All sessions should have failed'); }); it('handles tests with 404 imports', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-404-import.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.suites.length).to.equal(0); - expect(session.testResults!.tests.length).to.equal(0); - expect(session.request404s).to.eql([ + assert.equal(session.testResults!.suites.length, 0); + assert.equal(session.testResults!.tests.length, 0); + assert.deepEqual(session.request404s, [ 'integration/test-runner/tests/test-failure/browser-tests/non-existing.js', ]); - expect(session.errors).to.eql([ERROR_NOT_IMPORTABLE]); - expect(session.logs.length).to.equal(1); + assert.deepEqual(session.errors, [ERROR_NOT_IMPORTABLE]); + assert.equal(session.logs.length, 1); expectFetchModuleFailed((session.logs[0] as any)[0]); } }); it('handles tests that error with a circular reference', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-circular-error.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.tests.map(t => t.name)).to.eql(['bad predicate']); - expect(session.passed).to.be.false; - expect(session.testResults!.tests![0].error!.message).to.equal( + assert.deepEqual(session.testResults!.tests.map(t => t.name), ['bad predicate']); + assert.equal(session.passed, false); + assert.equal( + session.testResults!.tests![0].error!.message, "expected { x: 'x', circle: [Circular] } to equal null", ); } @@ -74,86 +76,93 @@ export function runTestFailureTest( it('handles tests that throw in afterEach', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-after-each.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.tests.map(t => t.name)).to.eql([ + assert.deepEqual(session.testResults!.tests.map(t => t.name), [ 'true is true', 'true is really true', ]); - expect(session.errors.length).to.equal(1); - expect(session.errors[0].message).to.include('error thrown in afterEach hook'); - expect(session.errors[0].stack).to.include( - `test-failure${sep}browser-tests${sep}fail-after-each.test.js`, + assert.equal(session.errors.length, 1); + assert.ok(session.errors[0].message.includes('error thrown in afterEach hook')); + assert.ok( + session.errors[0].stack!.includes( + `test-failure${sep}browser-tests${sep}fail-after-each.test.js`, + ), ); - expect(session.logs).to.eql([]); + assert.deepEqual(session.logs, []); } }); it('handles tests that throw in after', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-after.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.tests.map(t => t.name)).to.eql([ + assert.deepEqual(session.testResults!.tests.map(t => t.name), [ 'true is true', 'true is really true', ]); - expect(session.errors.length).to.equal(1); - expect(session.errors[0].message).to.include('error thrown in after hook'); - - expect(session.errors[0].stack).to.include( - `test-failure${sep}browser-tests${sep}fail-after.test.js`, + assert.equal(session.errors.length, 1); + assert.ok(session.errors[0].message.includes('error thrown in after hook')); + assert.ok( + session.errors[0].stack!.includes( + `test-failure${sep}browser-tests${sep}fail-after.test.js`, + ), ); - expect(session.logs).to.eql([]); + assert.deepEqual(session.logs, []); } }); it('handles tests that throw in beforeEach', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-before-each.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.tests.map(t => t.name)).to.eql([ + assert.deepEqual(session.testResults!.tests.map(t => t.name), [ 'true is true', 'true is really true', ]); - expect(session.errors.length).to.equal(1); - expect(session.errors[0].message).to.include('error thrown in beforeEach hook'); - - expect(session.errors[0].stack).to.include( - `test-failure${sep}browser-tests${sep}fail-before-each.test.js`, + assert.equal(session.errors.length, 1); + assert.ok(session.errors[0].message.includes('error thrown in beforeEach hook')); + assert.ok( + session.errors[0].stack!.includes( + `test-failure${sep}browser-tests${sep}fail-before-each.test.js`, + ), ); - expect(session.logs).to.eql([]); + assert.deepEqual(session.logs, []); } }); it('handles tests that throw in before', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-before.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.tests.map(t => t.name)).to.eql([ + assert.deepEqual(session.testResults!.tests.map(t => t.name), [ 'true is true', 'true is really true', ]); - expect(session.errors.length).to.equal(1); - expect(session.errors[0].message).to.include('error thrown in before hook'); - - expect(session.errors[0].stack).to.include( - `test-failure${sep}browser-tests${sep}fail-before.test.js`, + assert.equal(session.errors.length, 1); + assert.ok(session.errors[0].message.includes('error thrown in before hook')); + assert.ok( + session.errors[0].stack!.includes( + `test-failure${sep}browser-tests${sep}fail-before.test.js`, + ), ); - expect(session.logs).to.eql([]); + assert.deepEqual(session.logs, []); } }); it('handles a custom thrown error', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-custom-error.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.tests.map(t => t.name)).to.eql(['custom error']); - expect(session.testResults!.tests[0].error!.message).to.include('a custom error thrown'); - expect(session.testResults!.tests[0].error!.stack).to.include( - `browser-tests${sep}fail-custom-error.test.js`, + assert.deepEqual(session.testResults!.tests.map(t => t.name), ['custom error']); + assert.ok(session.testResults!.tests[0].error!.message.includes('a custom error thrown')); + assert.ok( + session.testResults!.tests[0].error!.stack!.includes( + `browser-tests${sep}fail-custom-error.test.js`, + ), ); - expect(session.errors).to.eql([]); - expect(session.logs).to.eql([]); + assert.deepEqual(session.errors, []); + assert.deepEqual(session.logs, []); } }); @@ -161,61 +170,64 @@ export function runTestFailureTest( const sessions = allSessions.filter(s => s.testFile.endsWith('fail-error-module-exec.test.js'), ); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.suites.length).to.equal(0); - expect(session.testResults!.tests.length).to.equal(0); - expect(session.errors).to.eql([ERROR_NOT_IMPORTABLE]); - expect(session.logs[0][0]).to.include('This is thrown before running tests'); + assert.equal(session.testResults!.suites.length, 0); + assert.equal(session.testResults!.tests.length, 0); + assert.deepEqual(session.errors, [ERROR_NOT_IMPORTABLE]); + assert.ok((session.logs[0][0] as any).includes('This is thrown before running tests')); } }); it('handles error stack traces correctly', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-stack-trace.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.tests.length).to.equal(1); - expect(session.testResults!.tests[0]!.error!.message).to.include('My error'); - expect(session.testResults!.tests[0]!.error!.stack).to.include('throwErrorC'); - expect(session.testResults!.tests[0]!.error!.stack).to.include('fail-stack-trace-c.js'); - expect(session.errors).to.eql([]); - expect(session.logs).to.eql([]); + assert.equal(session.testResults!.tests.length, 1); + assert.ok(session.testResults!.tests[0]!.error!.message.includes('My error')); + assert.ok(session.testResults!.tests[0]!.error!.stack!.includes('throwErrorC')); + assert.ok( + session.testResults!.tests[0]!.error!.stack!.includes('fail-stack-trace-c.js'), + ); + assert.deepEqual(session.errors, []); + assert.deepEqual(session.logs, []); } }); it('handles string diffs correctly', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-string-diff.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.tests[0]!.name).to.equal('string diff'); - expect(session.testResults!.tests[0]!.error!.message).to.include( - "expected 'foo' to equal 'bar'", + assert.equal(session.testResults!.tests[0]!.name, 'string diff'); + assert.ok( + session.testResults!.tests[0]!.error!.message.includes("expected 'foo' to equal 'bar'"), ); - expect(session.testResults!.tests[0]!.error!.expected).to.equal('bar'); - expect(session.testResults!.tests[0]!.error!.actual).to.equal('foo'); - expect(session.testResults!.tests.length).to.equal(1); - expect(session.errors).to.eql([]); - expect(session.logs).to.eql([]); + assert.equal(session.testResults!.tests[0]!.error!.expected, 'bar'); + assert.equal(session.testResults!.tests[0]!.error!.actual, 'foo'); + assert.equal(session.testResults!.tests.length, 1); + assert.deepEqual(session.errors, []); + assert.deepEqual(session.logs, []); } }); it('handles syntax errors', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-syntax-error.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.suites.length).to.eql(0); - expect(session.testResults!.tests.length).to.eql(0); - expect(session.errors).to.eql([ERROR_NOT_IMPORTABLE]); + assert.equal(session.testResults!.suites.length, 0); + assert.equal(session.testResults!.tests.length, 0); + assert.deepEqual(session.errors, [ERROR_NOT_IMPORTABLE]); } }); it('handles tests that error with a readonly actual', () => { const sessions = allSessions.filter(s => s.testFile.endsWith('fail-readonly-actual.test.js')); - expect(sessions.length === browserCount).to.equal(true); + assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - expect(session.testResults!.tests.map(t => t.name)).to.eql(['readonly actual']); - expect(session.passed).to.be.false; - expect(session.testResults!.tests![0].error!.message).to.equal( + assert.deepEqual(session.testResults!.tests.map(t => t.name), ['readonly actual']); + assert.equal(session.passed, false); + assert.equal( + session.testResults!.tests![0].error!.message, 'expected { x: {} } to equal null', ); } diff --git a/packages/test-runner-chrome/package.json b/packages/test-runner-chrome/package.json index 4dc77f206b..579497fafd 100644 --- a/packages/test-runner-chrome/package.json +++ b/packages/test-runner-chrome/package.json @@ -26,8 +26,8 @@ }, "scripts": { "build": "tsc", - "test:node": "mocha test/**/*.test.ts --require ts-node/register --reporter dot", - "test:watch": "mocha test/**/*.test.ts --require ts-node/register --watch --watch-files src,test" + "test:node": "node --experimental-strip-types --test --test-force-exit \"test/**/*.test.ts\"", + "test:watch": "node --experimental-strip-types --test --test-force-exit --watch \"test/**/*.test.ts\"" }, "files": [ "*.d.ts", diff --git a/packages/test-runner-chrome/test/chromeLauncher.test.ts b/packages/test-runner-chrome/test/chromeLauncher.test.ts index 7e129d103a..e714740e9f 100644 --- a/packages/test-runner-chrome/test/chromeLauncher.test.ts +++ b/packages/test-runner-chrome/test/chromeLauncher.test.ts @@ -1,9 +1,8 @@ -import { runIntegrationTests } from '../../../integration/test-runner/index.js'; -import { chromeLauncher } from '../src/index.js'; - -describe('test-runner-chrome', function testRunnerChrome() { - this.timeout(20000); +import { describe } from 'node:test'; +import { runIntegrationTests } from '../../../integration/test-runner/index.ts'; +import { chromeLauncher } from '../dist/index.js'; +describe('test-runner-chrome', { timeout: 20000 }, () => { function createConfig() { return { browsers: [chromeLauncher()], diff --git a/packages/test-runner-playwright/package.json b/packages/test-runner-playwright/package.json index d7429b9287..18666409f0 100644 --- a/packages/test-runner-playwright/package.json +++ b/packages/test-runner-playwright/package.json @@ -26,8 +26,8 @@ }, "scripts": { "build": "tsc", - "test:node": "mocha test/**/*.test.ts --require ts-node/register --reporter dot", - "test:watch": "mocha test/**/*.test.ts --require ts-node/register --watch --watch-files src,test" + "test:node": "node --experimental-strip-types --test --test-force-exit \"test/**/*.test.ts\"", + "test:watch": "node --experimental-strip-types --test --test-force-exit --watch \"test/**/*.test.ts\"" }, "files": [ "*.d.ts", diff --git a/packages/test-runner-playwright/test/playwrightLauncher.test.ts b/packages/test-runner-playwright/test/playwrightLauncher.test.ts index 37eceac5c1..39904c2b0d 100644 --- a/packages/test-runner-playwright/test/playwrightLauncher.test.ts +++ b/packages/test-runner-playwright/test/playwrightLauncher.test.ts @@ -1,10 +1,9 @@ import os from 'os'; -import { runIntegrationTests } from '../../../integration/test-runner/index.js'; -import { playwrightLauncher } from '../src/index.js'; - -describe('test-runner-playwright chromium', function testRunnerPlaywright() { - this.timeout(100000); +import { describe } from 'node:test'; +import { runIntegrationTests } from '../../../integration/test-runner/index.ts'; +import { playwrightLauncher } from '../dist/index.js'; +describe('test-runner-playwright chromium', { timeout: 100000 }, () => { function createConfig() { return { browsers: [playwrightLauncher({ product: 'chromium' })] }; } @@ -20,9 +19,7 @@ describe('test-runner-playwright chromium', function testRunnerPlaywright() { }); }); -describe('test-runner-playwright webkit', function testRunnerPlaywright() { - this.timeout(100000); - +describe('test-runner-playwright webkit', { timeout: 100000 }, () => { function createConfig() { return { browsers: [playwrightLauncher({ product: 'webkit' })] }; } @@ -38,11 +35,8 @@ describe('test-runner-playwright webkit', function testRunnerPlaywright() { }); }); -// we don't run all tests in the windows CI if (os.platform() !== 'win32') { - describe('test-runner-playwright firefox', function testRunnerPlaywright() { - this.timeout(100000); - + describe('test-runner-playwright firefox', { timeout: 100000 }, () => { function createConfig() { return { browsers: [playwrightLauncher({ product: 'firefox' })] }; } @@ -59,9 +53,7 @@ if (os.platform() !== 'win32') { }); }); - describe('test-runner-playwright all', function testRunnerPlaywright() { - this.timeout(100000); - + describe('test-runner-playwright all', { timeout: 100000 }, () => { function createConfig() { return { browsers: [ diff --git a/packages/test-runner-puppeteer/package.json b/packages/test-runner-puppeteer/package.json index 088d0262b2..373aae8121 100644 --- a/packages/test-runner-puppeteer/package.json +++ b/packages/test-runner-puppeteer/package.json @@ -26,8 +26,8 @@ }, "scripts": { "build": "tsc", - "test:node": "mocha test/**/*.test.ts --require ts-node/register --reporter dot", - "test:watch": "mocha test/**/*.test.ts --require ts-node/register --watch --watch-files src,test" + "test:node": "node --experimental-strip-types --test --test-force-exit \"test/**/*.test.ts\"", + "test:watch": "node --experimental-strip-types --test --test-force-exit --watch \"test/**/*.test.ts\"" }, "files": [ "*.d.ts", diff --git a/packages/test-runner-puppeteer/test/puppeteerLauncher.test.ts b/packages/test-runner-puppeteer/test/puppeteerLauncher.test.ts index 718410a81a..f418554f41 100644 --- a/packages/test-runner-puppeteer/test/puppeteerLauncher.test.ts +++ b/packages/test-runner-puppeteer/test/puppeteerLauncher.test.ts @@ -1,9 +1,8 @@ -import { runIntegrationTests } from '../../../integration/test-runner/index.js'; -import { puppeteerLauncher } from '../src/index.js'; - -describe('test-runner-puppeteer', function testRunnerPuppeteer() { - this.timeout(20000); +import { describe } from 'node:test'; +import { runIntegrationTests } from '../../../integration/test-runner/index.ts'; +import { puppeteerLauncher } from '../dist/index.js'; +describe('test-runner-puppeteer', { timeout: 20000 }, () => { function createConfig() { return { browsers: [puppeteerLauncher()], From e842b981af5301303029ab0b4ab509c185817a66 Mon Sep 17 00:00:00 2001 From: Benny Powers Date: Wed, 3 Jun 2026 00:09:34 +0300 Subject: [PATCH 2/3] style(test-runner): fix prettier formatting in integration test files Assisted-By: Claude Opus 4.6 (1M context) --- .../test-runner/tests/basic/runBasicTest.ts | 63 ++++++++++++------- .../test-runner/tests/focus/runFocusTest.ts | 11 +++- .../location-change/runLocationChangeTest.ts | 11 +++- .../test-runner/tests/many/runManyTests.ts | 5 +- .../tests/parallel/runParallelTest.ts | 10 ++- .../tests/test-failure/runTestFailureTest.ts | 62 +++++++++++------- 6 files changed, 107 insertions(+), 55 deletions(-) diff --git a/integration/test-runner/tests/basic/runBasicTest.ts b/integration/test-runner/tests/basic/runBasicTest.ts index 4e95f18c1e..d50ca5c8fa 100644 --- a/integration/test-runner/tests/basic/runBasicTest.ts +++ b/integration/test-runner/tests/basic/runBasicTest.ts @@ -15,12 +15,19 @@ export function runBasicTest( before(async () => { const result = await runTests({ ...config, - files: [...(config.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], + files: [ + ...(config.files ?? []), + resolve(import.meta.dirname, 'browser-tests', '*.test.js'), + ], plugins: [...(config.plugins ?? []), legacyPlugin()], }); allSessions = result.sessions; - assert.equal(allSessions.every(s => s.passed), true, 'All sessions should have passed'); + assert.equal( + allSessions.every(s => s.passed), + true, + 'All sessions should have passed', + ); }); it('passes basic test', () => { @@ -30,7 +37,10 @@ export function runBasicTest( assert.equal(session.testResults!.tests.length, 0); assert.equal(session.testResults!.suites.length, 1); assert.equal(session.testResults!.suites[0].tests.length, 1); - assert.deepEqual(session.testResults!.suites[0].tests.map(t => t.name), ['works']); + assert.deepEqual( + session.testResults!.suites[0].tests.map(t => t.name), + ['works'], + ); } }); @@ -42,15 +52,18 @@ export function runBasicTest( 'Each browser should run js-syntax.test.js', ); for (const session of sessions) { - assert.deepEqual(session.testResults!.tests.map(t => t.name), [ - 'supports object spread', - 'supports async functions', - 'supports exponentiation', - 'supports classes', - 'supports template literals', - 'supports optional chaining', - 'supports nullish coalescing', - ]); + assert.deepEqual( + session.testResults!.tests.map(t => t.name), + [ + 'supports object spread', + 'supports async functions', + 'supports exponentiation', + 'supports classes', + 'supports template literals', + 'supports optional chaining', + 'supports nullish coalescing', + ], + ); } }); @@ -62,11 +75,10 @@ export function runBasicTest( 'Each browser should run module-features.test.js', ); for (const session of sessions) { - assert.deepEqual(session.testResults!.tests.map(t => t.name), [ - 'supports static imports', - 'supports dynamic imports', - 'supports import meta', - ]); + assert.deepEqual( + session.testResults!.tests.map(t => t.name), + ['supports static imports', 'supports dynamic imports', 'supports import meta'], + ); } }); @@ -80,13 +92,16 @@ export function runBasicTest( for (const session of sessions) { assert.equal(session.testResults!.tests.length, 0); assert.equal(session.testResults!.suites.length, 1); - assert.deepEqual(session.testResults!.suites[0].tests.map(t => t.name), [ - 'can call setTimeout', - 'can cancel setTimeout', - 'can call and cancel setInterval', - 'can call requestAnimationFrame', - 'can cancel requestAnimationFrame', - ]); + assert.deepEqual( + session.testResults!.suites[0].tests.map(t => t.name), + [ + 'can call setTimeout', + 'can cancel setTimeout', + 'can call and cancel setInterval', + 'can call requestAnimationFrame', + 'can cancel requestAnimationFrame', + ], + ); } }); }); diff --git a/integration/test-runner/tests/focus/runFocusTest.ts b/integration/test-runner/tests/focus/runFocusTest.ts index 3c98f5a0a5..e13bdaf54e 100644 --- a/integration/test-runner/tests/focus/runFocusTest.ts +++ b/integration/test-runner/tests/focus/runFocusTest.ts @@ -15,14 +15,21 @@ export function runFocusTest( const result = await runTests({ ...config, concurrency: 2, - files: [...(config.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], + files: [ + ...(config.files ?? []), + resolve(import.meta.dirname, 'browser-tests', '*.test.js'), + ], plugins: [...(config.plugins ?? []), legacyPlugin()], }); allSessions = result.sessions; }); it.skip('can run tests with focus, concurrently and sequentially', () => { - assert.equal(allSessions.every(s => s.passed), true, 'All sessions should have passed'); + assert.equal( + allSessions.every(s => s.passed), + true, + 'All sessions should have passed', + ); }); }); } diff --git a/integration/test-runner/tests/location-change/runLocationChangeTest.ts b/integration/test-runner/tests/location-change/runLocationChangeTest.ts index f3b9ca2a19..08bc8922e7 100644 --- a/integration/test-runner/tests/location-change/runLocationChangeTest.ts +++ b/integration/test-runner/tests/location-change/runLocationChangeTest.ts @@ -16,7 +16,10 @@ export function runLocationChangeTest( const result = await runTests( { ...config, - files: [...(config.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], + files: [ + ...(config.files ?? []), + resolve(import.meta.dirname, 'browser-tests', '*.test.js'), + ], plugins: [...(config.plugins ?? []), legacyPlugin()], }, undefined, @@ -24,7 +27,11 @@ export function runLocationChangeTest( ); allSessions = result.sessions; - assert.equal(allSessions.every(s => s.passed), false, 'All sessions should have failed'); + assert.equal( + allSessions.every(s => s.passed), + false, + 'All sessions should have failed', + ); }); it('handles tests which assign to window.location.href', () => { diff --git a/integration/test-runner/tests/many/runManyTests.ts b/integration/test-runner/tests/many/runManyTests.ts index 0cb5c68cb3..526fbbfebd 100644 --- a/integration/test-runner/tests/many/runManyTests.ts +++ b/integration/test-runner/tests/many/runManyTests.ts @@ -12,7 +12,10 @@ export function runManyTests( await Promise.all([ runTests({ ...config, - files: [...(config.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], + files: [ + ...(config.files ?? []), + resolve(import.meta.dirname, 'browser-tests', '*.test.js'), + ], plugins: [...(config.plugins ?? []), legacyPlugin()], }), ]); diff --git a/integration/test-runner/tests/parallel/runParallelTest.ts b/integration/test-runner/tests/parallel/runParallelTest.ts index dc22f853f3..2858975d7f 100644 --- a/integration/test-runner/tests/parallel/runParallelTest.ts +++ b/integration/test-runner/tests/parallel/runParallelTest.ts @@ -15,13 +15,19 @@ export function runParallelTest( await Promise.all([ runTests({ ...configA, - files: [...(configA.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], + files: [ + ...(configA.files ?? []), + resolve(import.meta.dirname, 'browser-tests', '*.test.js'), + ], plugins: [...(configA.plugins ?? []), legacyPlugin()], }), runTests({ ...configB, - files: [...(configB.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], + files: [ + ...(configB.files ?? []), + resolve(import.meta.dirname, 'browser-tests', '*.test.js'), + ], plugins: [...(configB.plugins ?? []), legacyPlugin()], }), ]); diff --git a/integration/test-runner/tests/test-failure/runTestFailureTest.ts b/integration/test-runner/tests/test-failure/runTestFailureTest.ts index 5a1d7f9005..223f9d97a7 100644 --- a/integration/test-runner/tests/test-failure/runTestFailureTest.ts +++ b/integration/test-runner/tests/test-failure/runTestFailureTest.ts @@ -35,7 +35,10 @@ export function runTestFailureTest( const result = await runTests( { ...config, - files: [...(config.files ?? []), resolve(import.meta.dirname, 'browser-tests', '*.test.js')], + files: [ + ...(config.files ?? []), + resolve(import.meta.dirname, 'browser-tests', '*.test.js'), + ], plugins: [...(config.plugins ?? []), legacyPlugin()], }, undefined, @@ -43,7 +46,11 @@ export function runTestFailureTest( ); allSessions = result.sessions; - assert.equal(allSessions.every(s => s.passed), false, 'All sessions should have failed'); + assert.equal( + allSessions.every(s => s.passed), + false, + 'All sessions should have failed', + ); }); it('handles tests with 404 imports', () => { @@ -65,7 +72,10 @@ export function runTestFailureTest( const sessions = allSessions.filter(s => s.testFile.endsWith('fail-circular-error.test.js')); assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - assert.deepEqual(session.testResults!.tests.map(t => t.name), ['bad predicate']); + assert.deepEqual( + session.testResults!.tests.map(t => t.name), + ['bad predicate'], + ); assert.equal(session.passed, false); assert.equal( session.testResults!.tests![0].error!.message, @@ -78,10 +88,10 @@ export function runTestFailureTest( const sessions = allSessions.filter(s => s.testFile.endsWith('fail-after-each.test.js')); assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - assert.deepEqual(session.testResults!.tests.map(t => t.name), [ - 'true is true', - 'true is really true', - ]); + assert.deepEqual( + session.testResults!.tests.map(t => t.name), + ['true is true', 'true is really true'], + ); assert.equal(session.errors.length, 1); assert.ok(session.errors[0].message.includes('error thrown in afterEach hook')); assert.ok( @@ -97,10 +107,10 @@ export function runTestFailureTest( const sessions = allSessions.filter(s => s.testFile.endsWith('fail-after.test.js')); assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - assert.deepEqual(session.testResults!.tests.map(t => t.name), [ - 'true is true', - 'true is really true', - ]); + assert.deepEqual( + session.testResults!.tests.map(t => t.name), + ['true is true', 'true is really true'], + ); assert.equal(session.errors.length, 1); assert.ok(session.errors[0].message.includes('error thrown in after hook')); assert.ok( @@ -116,10 +126,10 @@ export function runTestFailureTest( const sessions = allSessions.filter(s => s.testFile.endsWith('fail-before-each.test.js')); assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - assert.deepEqual(session.testResults!.tests.map(t => t.name), [ - 'true is true', - 'true is really true', - ]); + assert.deepEqual( + session.testResults!.tests.map(t => t.name), + ['true is true', 'true is really true'], + ); assert.equal(session.errors.length, 1); assert.ok(session.errors[0].message.includes('error thrown in beforeEach hook')); assert.ok( @@ -135,10 +145,10 @@ export function runTestFailureTest( const sessions = allSessions.filter(s => s.testFile.endsWith('fail-before.test.js')); assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - assert.deepEqual(session.testResults!.tests.map(t => t.name), [ - 'true is true', - 'true is really true', - ]); + assert.deepEqual( + session.testResults!.tests.map(t => t.name), + ['true is true', 'true is really true'], + ); assert.equal(session.errors.length, 1); assert.ok(session.errors[0].message.includes('error thrown in before hook')); assert.ok( @@ -154,7 +164,10 @@ export function runTestFailureTest( const sessions = allSessions.filter(s => s.testFile.endsWith('fail-custom-error.test.js')); assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - assert.deepEqual(session.testResults!.tests.map(t => t.name), ['custom error']); + assert.deepEqual( + session.testResults!.tests.map(t => t.name), + ['custom error'], + ); assert.ok(session.testResults!.tests[0].error!.message.includes('a custom error thrown')); assert.ok( session.testResults!.tests[0].error!.stack!.includes( @@ -186,9 +199,7 @@ export function runTestFailureTest( assert.equal(session.testResults!.tests.length, 1); assert.ok(session.testResults!.tests[0]!.error!.message.includes('My error')); assert.ok(session.testResults!.tests[0]!.error!.stack!.includes('throwErrorC')); - assert.ok( - session.testResults!.tests[0]!.error!.stack!.includes('fail-stack-trace-c.js'), - ); + assert.ok(session.testResults!.tests[0]!.error!.stack!.includes('fail-stack-trace-c.js')); assert.deepEqual(session.errors, []); assert.deepEqual(session.logs, []); } @@ -224,7 +235,10 @@ export function runTestFailureTest( const sessions = allSessions.filter(s => s.testFile.endsWith('fail-readonly-actual.test.js')); assert.equal(sessions.length === browserCount, true); for (const session of sessions) { - assert.deepEqual(session.testResults!.tests.map(t => t.name), ['readonly actual']); + assert.deepEqual( + session.testResults!.tests.map(t => t.name), + ['readonly actual'], + ); assert.equal(session.passed, false); assert.equal( session.testResults!.tests![0].error!.message, From c94513bd34d08e682295e9da1448af73747f713c Mon Sep 17 00:00:00 2001 From: Benny Powers Date: Wed, 3 Jun 2026 00:11:49 +0300 Subject: [PATCH 3/3] fix(test-runner): remove unused describe import from integration index Assisted-By: Claude Opus 4.6 (1M context) --- integration/test-runner/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/integration/test-runner/index.ts b/integration/test-runner/index.ts index 8cdb7a95ec..4544732442 100644 --- a/integration/test-runner/index.ts +++ b/integration/test-runner/index.ts @@ -1,4 +1,3 @@ -import { describe } from 'node:test'; import type { BrowserLauncher, TestRunnerCoreConfig } from '@web/test-runner-core'; import { runBasicTest } from './tests/basic/runBasicTest.ts'; import { runConfigGroupsTest } from './tests/config-groups/runConfigGroupsTest.ts';