vscode icon indicating copy to clipboard operation
vscode copied to clipboard

feat: add Copy Failing Tests Output command with stack traces

Open BLamy opened this issue 2 months ago • 0 comments

Make it so I can copy the test output in a format consumable by an LLM

image

Example Output

Test: first pass: 2 => 1 (11.296134000000052ms)
File: /workspaces/vscode/samples/basic/test/each.test.ts

Error:
expected 2 to be 1 // Object.is equality

Stack trace:
  at  (/workspaces/vscode/samples/basic/test/each.test.ts:12:15)

    10 |     [1, 1], [2, 1], [3, 1]
    11 |   ])(`first pass: %i => %i`, (a, b) => {
>  12 |     expect(a).toBe(b)
                           ^ expected 2 to be 1 // Object.is equality
    13 |   })
    14 |   it.each([

================================================================================

Test: first pass: 3 => 1 (1.7611650000000054ms)
File: /workspaces/vscode/samples/basic/test/each.test.ts

Error:
expected 3 to be 1 // Object.is equality

Stack trace:
  at  (/workspaces/vscode/samples/basic/test/each.test.ts:12:15)

    10 |     [1, 1], [2, 1], [3, 1]
    11 |   ])(`first pass: %i => %i`, (a, b) => {
>  12 |     expect(a).toBe(b)
                           ^ expected 3 to be 1 // Object.is equality
    13 |   })
    14 |   it.each([

================================================================================

Test: last pass: 3 => 1 (0.9905889999999999ms)
File: /workspaces/vscode/samples/basic/test/each.test.ts

Error:
expected 3 to be 1 // Object.is equality

Stack trace:
  at  (/workspaces/vscode/samples/basic/test/each.test.ts:17:15)

    15 |     [1, 1], [2, 2], [3, 1]
    16 |   ])(`last pass: %i => %i`, (a, b) => {
>  17 |     expect(a).toBe(b)
                           ^ expected 3 to be 1 // Object.is equality
    18 |   })
    19 |   it.each([

================================================================================

Test: first fail: 3 => 1 (0.6461950000000343ms)
File: /workspaces/vscode/samples/basic/test/each.test.ts

Error:
expected 3 to be 1 // Object.is equality

Stack trace:
  at  (/workspaces/vscode/samples/basic/test/each.test.ts:22:15)

    20 |     [1, 1], [2, 2], [3, 1]
    21 |   ])(`first fail: %i => %i`, (a, b) => {
>  22 |     expect(a).toBe(b)
                           ^ expected 3 to be 1 // Object.is equality
    23 |   })
    24 |   it.each([

================================================================================

Test: last fail: 3 => 1 (1.9933630000000448ms)
File: /workspaces/vscode/samples/basic/test/each.test.ts

Error:
expected 3 to be 1 // Object.is equality

Stack trace:
  at  (/workspaces/vscode/samples/basic/test/each.test.ts:27:15)

    25 |     [1, 1], [2, 2], [3, 1]
    26 |   ])(`last fail: %i => %i`, (a, b) => {
>  27 |     expect(a).toBe(b)
                           ^ expected 3 to be 1 // Object.is equality
    28 |   })
    29 |   it.each([

================================================================================

Test: all fail: 1 => 0 (0.6465260000001081ms)
File: /workspaces/vscode/samples/basic/test/each.test.ts

Error:
expected 1 to be +0 // Object.is equality

Stack trace:
  at  (/workspaces/vscode/samples/basic/test/each.test.ts:32:15)

    30 |     [1, 0], [2, 0], [3, 0]
    31 |   ])(`all fail: %i => %i`, (a, b) => {
>  32 |     expect(a).toBe(b)
                           ^ expected 1 to be +0 // Object.is equality
    33 |   })
    34 |   it.each([

================================================================================

Test: all fail: 2 => 0 (0.5327340000000049ms)
File: /workspaces/vscode/samples/basic/test/each.test.ts

Error:
expected 2 to be +0 // Object.is equality

Stack trace:
  at  (/workspaces/vscode/samples/basic/test/each.test.ts:32:15)

    30 |     [1, 0], [2, 0], [3, 0]
    31 |   ])(`all fail: %i => %i`, (a, b) => {
>  32 |     expect(a).toBe(b)
                           ^ expected 2 to be +0 // Object.is equality
    33 |   })
    34 |   it.each([

================================================================================

Test: all fail: 3 => 0 (1.173998000000097ms)
File: /workspaces/vscode/samples/basic/test/each.test.ts

Error:
expected 3 to be +0 // Object.is equality

Stack trace:
  at  (/workspaces/vscode/samples/basic/test/each.test.ts:32:15)

    30 |     [1, 0], [2, 0], [3, 0]
    31 |   ])(`all fail: %i => %i`, (a, b) => {
>  32 |     expect(a).toBe(b)
                           ^ expected 3 to be +0 // Object.is equality
    33 |   })
    34 |   it.each([

================================================================================

Test: fail (5.867705000000001ms)
File: /workspaces/vscode/samples/basic/test/bug.test.ts

Error:
expected 1 to deeply equal 2

Stack trace:
  at  (/workspaces/vscode/samples/basic/test/bug.test.ts:3:13)

     1 | import { expect, test } from 'vitest';
     2 | test('fail', () => {
>   3 |   expect(1).toEqual(2);
                         ^ expected 1 to deeply equal 2
     4 | })

================================================================================

Test: fails with error thrown (5.684620999999993ms)
File: /workspaces/vscode/samples/basic/test/throw.test.ts

Error:
Something went wrong

Stack trace:
  at doSomething (/workspaces/vscode/samples/basic/src/add.ts:16:9)

    14 | 
    15 | function doSomething() {
>  16 |   throw new Error('Something went wrong');
                     ^ Something went wrong
    17 | }
    18 | 

  at addError (/workspaces/vscode/samples/basic/src/add.ts:11:3)

     9 | 
    10 | export function addError(from: number, to: number) {
>  11 |   doSomething()
               ^ Something went wrong
    12 |   return add(from, to)
    13 | }

  at  (/workspaces/vscode/samples/basic/test/throw.test.ts:10:12)

     8 | 
     9 |   it('fails with error thrown', () => {
>  10 |     expect(addError(1, 1)).toBe(2)
                        ^ Something went wrong
    11 |   })
    12 | })

BLamy avatar Oct 29 '25 06:10 BLamy