diff --git a/docs/src/test-api/class-testinfoerror-matcherresult.md b/docs/src/test-api/class-testinfoerror-matcherresult.md deleted file mode 100644 index f68e2db1ae..0000000000 --- a/docs/src/test-api/class-testinfoerror-matcherresult.md +++ /dev/null @@ -1,35 +0,0 @@ -# class: TestInfoErrorMatcherResult -* since: v1.48 -* langs: js - -Matcher-specific details for the error thrown during the `expect` call. - -## property: TestInfoErrorMatcherResult.actual -* since: v1.48 -- type: ?<[unknown]> - -Actual value. - -## property: TestInfoErrorMatcherResult.expected -* since: v1.48 -- type: ?<[unknown]> - -Expected value. - -## property: TestInfoErrorMatcherResult.name -* since: v1.48 -- type: ?<[string]> - -Matcher name. - -## property: TestInfoErrorMatcherResult.pass -* since: v1.48 -- type: <[string]> - -Whether the matcher passed. - -## property: TestInfoErrorMatcherResult.timeout -* since: v1.48 -- type: ?<[int]> - -Timeout that was used during matching. diff --git a/docs/src/test-api/class-testinfoerror.md b/docs/src/test-api/class-testinfoerror.md index b084aaf54b..66e78ecabd 100644 --- a/docs/src/test-api/class-testinfoerror.md +++ b/docs/src/test-api/class-testinfoerror.md @@ -4,12 +4,6 @@ Information about an error thrown during test execution. -## property: TestInfoError.matcherResult -* since: v1.48 -- type: ?<[TestInfoErrorMatcherResult]> - -Matcher result details. - ## property: TestInfoError.message * since: v1.10 - type: ?<[string]> diff --git a/docs/src/test-reporter-api/class-testerror-matcherresult.md b/docs/src/test-reporter-api/class-testerror-matcherresult.md deleted file mode 100644 index b8d0f1dce7..0000000000 --- a/docs/src/test-reporter-api/class-testerror-matcherresult.md +++ /dev/null @@ -1,35 +0,0 @@ -# class: TestErrorMatcherResult -* since: v1.48 -* langs: js - -Matcher-specific details for the error thrown during the `expect` call. - -## property: TestErrorMatcherResult.actual -* since: v1.48 -- type: ?<[unknown]> - -Actual value. - -## property: TestErrorMatcherResult.expected -* since: v1.48 -- type: ?<[unknown]> - -Expected value. - -## property: TestErrorMatcherResult.name -* since: v1.48 -- type: ?<[string]> - -Matcher name. - -## property: TestErrorMatcherResult.pass -* since: v1.48 -- type: <[string]> - -Whether the matcher passed. - -## property: TestErrorMatcherResult.timeout -* since: v1.48 -- type: ?<[int]> - -Timeout that was used during matching. diff --git a/docs/src/test-reporter-api/class-testerror.md b/docs/src/test-reporter-api/class-testerror.md index cc59c3a4c6..7a872c63fc 100644 --- a/docs/src/test-reporter-api/class-testerror.md +++ b/docs/src/test-reporter-api/class-testerror.md @@ -4,12 +4,6 @@ Information about an error thrown during test execution. -## property: TestError.matcherResult -* since: v1.48 -- type: ?<[TestErrorMatcherResult]> - -Matcher result details. - ## property: TestError.message * since: v1.10 - type: ?<[string]> diff --git a/packages/playwright/src/reporters/base.ts b/packages/playwright/src/reporters/base.ts index 22470b0954..c9ce2f7bcd 100644 --- a/packages/playwright/src/reporters/base.ts +++ b/packages/playwright/src/reporters/base.ts @@ -32,7 +32,6 @@ type Annotation = { type ErrorDetails = { message: string; location?: Location; - matcherResult?: TestError['matcherResult']; }; type TestSummary = { @@ -400,7 +399,6 @@ export function formatResultFailure(test: TestCase, result: TestResult, initialI errorDetails.push({ message: indent(formattedError.message, initialIndent), location: formattedError.location, - matcherResult: formattedError.matcherResult }); } return errorDetails; @@ -491,7 +489,6 @@ export function formatError(error: TestError, highlightCode: boolean): ErrorDeta return { location, message: tokens.join('\n'), - matcherResult: error.matcherResult }; } diff --git a/packages/playwright/src/util.ts b/packages/playwright/src/util.ts index d25f77947b..460b3de07e 100644 --- a/packages/playwright/src/util.ts +++ b/packages/playwright/src/util.ts @@ -63,20 +63,8 @@ export function filteredStackTrace(rawStack: RawStack): StackFrame[] { } export function serializeError(error: Error | any): TestInfoError { - if (error instanceof Error) { - const result: TestInfoError = filterStackTrace(error); - if ('matcherResult' in error && error.matcherResult) { - const matcherResult = (error.matcherResult as TestInfoError['matcherResult'])!; - result.matcherResult = { - pass: matcherResult.pass, - name: matcherResult.name, - expected: matcherResult.expected, - actual: matcherResult.actual, - timeout: matcherResult.timeout, - }; - } - return result; - } + if (error instanceof Error) + return filterStackTrace(error); return { value: util.inspect(error) }; diff --git a/packages/playwright/types/test.d.ts b/packages/playwright/types/test.d.ts index 09b5c7efdb..74aeb64133 100644 --- a/packages/playwright/types/test.d.ts +++ b/packages/playwright/types/test.d.ts @@ -8222,45 +8222,10 @@ export interface TestInfo { workerIndex: number; } -/** - * Matcher-specific details for the error thrown during the `expect` call. - */ -export interface TestInfoErrorMatcherResult { - /** - * Actual value. - */ - actual?: unknown; - - /** - * Expected value. - */ - expected?: unknown; - - /** - * Matcher name. - */ - name?: string; - - /** - * Whether the matcher passed. - */ - pass: string; - - /** - * Timeout that was used during matching. - */ - timeout?: number; -} - /** * Information about an error thrown during test execution. */ export interface TestInfoError { - /** - * Matcher result details. - */ - matcherResult?: TestInfoErrorMatcherResult; - /** * Error message. Set when [Error] (or its subclass) has been thrown. */ diff --git a/packages/playwright/types/testReporter.d.ts b/packages/playwright/types/testReporter.d.ts index b600e3c801..52073066f0 100644 --- a/packages/playwright/types/testReporter.d.ts +++ b/packages/playwright/types/testReporter.d.ts @@ -284,7 +284,6 @@ export interface JSONReportTest { export interface JSONReportError { message: string; location?: Location; - matcherResult?: TestErrorMatcherResult; } export interface JSONReportTestResult { @@ -568,36 +567,6 @@ export interface TestCase { type: "test"; } -/** - * Matcher-specific details for the error thrown during the `expect` call. - */ -export interface TestErrorMatcherResult { - /** - * Actual value. - */ - actual?: unknown; - - /** - * Expected value. - */ - expected?: unknown; - - /** - * Matcher name. - */ - name?: string; - - /** - * Whether the matcher passed. - */ - pass: string; - - /** - * Timeout that was used during matching. - */ - timeout?: number; -} - /** * Information about an error thrown during test execution. */ @@ -607,11 +576,6 @@ export interface TestError { */ location?: Location; - /** - * Matcher result details. - */ - matcherResult?: TestErrorMatcherResult; - /** * Error message. Set when [Error] (or its subclass) has been thrown. */ diff --git a/tests/playwright-test/reporter-errors.spec.ts b/tests/playwright-test/reporter-errors.spec.ts deleted file mode 100644 index ad09237234..0000000000 --- a/tests/playwright-test/reporter-errors.spec.ts +++ /dev/null @@ -1,145 +0,0 @@ -/** - * Copyright (c) Microsoft Corporation. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { test, expect } from './playwright-test-fixtures'; - -test('should report matcherResults for generic matchers', async ({ runInlineTest }) => { - const result = await runInlineTest({ - 'a.test.js': ` - import { test, expect as baseExpect } from '@playwright/test'; - const expect = baseExpect.soft; - test('fail', ({}) => { - expect(1).toBe(2); - expect(1).toBeCloseTo(2); - expect(undefined).toBeDefined(); - expect(1).toBeFalsy(); - expect(1).toBeGreaterThan(2); - expect(1).toBeGreaterThanOrEqual(2); - expect('a').toBeInstanceOf(Number); - expect(2).toBeLessThan(1); - expect(2).toBeLessThanOrEqual(1); - expect(1).toBeNaN(); - expect(1).toBeNull(); - expect(0).toBeTruthy(); - expect(1).toBeUndefined(); - expect([1]).toContain(2); - expect([1]).toContainEqual(2); - expect([1]).toEqual([2]); - expect([1]).toHaveLength(2); - expect({ a: 1 }).toHaveProperty('b'); - expect('a').toMatch(/b/); - expect({ a: 1 }).toMatchObject({ b: 2 }); - expect({ a: 1 }).toStrictEqual({ b: 2 }); - expect(() => {}).toThrow(); - expect(() => {}).toThrowError('a'); - }); - ` - }, { }); - expect(result.exitCode).toBe(1); - - const { errors } = result.report.suites[0].specs[0].tests[0].results[0]; - const matcherResults = errors.map(e => e.matcherResult); - expect(matcherResults).toEqual([ - { name: 'toBe', pass: false, expected: 2, actual: 1 }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { name: 'toEqual', pass: false, expected: [2], actual: [1] }, - { pass: false }, - { pass: false }, - { pass: false }, - { pass: false }, - { name: 'toStrictEqual', pass: false, expected: { b: 2 }, actual: { a: 1 } }, - { pass: false }, - { pass: false }, - ]); -}); - -test('should report matcherResults for web matchers', async ({ runInlineTest }) => { - const result = await runInlineTest({ - 'a.test.js': ` - import { test, expect as baseExpect } from '@playwright/test'; - - const expect = baseExpect.configure({ soft: true, timeout: 1 }); - test('fail', async ({ page }) => { - await page.setContent('Hello