Skip to content

chai.should() breaks error serialization #48918

@voxpelli

Description

@voxpelli

Version

18.17.0

Platform

MacOS

Subsystem

test

What steps will reproduce the bug?

In a test file like:

import { test } from "node:test";

test("failing test", () => {
  throw new Error('The failure');
});

Run that with node --test and you'll get:

✖ failing test (0.59475ms)
  Error: The failure
      at TestContext.<anonymous>

Add in chai.should():

import { test } from "node:test";
import chai from 'chai';

chai.should();

test("failing test", () => {
  throw new Error('The failure');
});

And you instead get:

[Error [ERR_TEST_FAILURE]: The failure] {
    [cause]: Error: The failure
        at TestContext.<anonymous>

How often does it reproduce? Is there a required condition?

Always

What is the expected behavior? Why is that the expected behavior?

All ERR_TEST_FAILURE events given in the data.details.error of a TestStream test:fail should have an err.code and should have that equal 'ERR_TEST_FAILURE', signaling that its err.cause contains the error thrown in the failing test:

const err = error.code === 'ERR_TEST_FAILURE' ? error.cause : error;

What do you see instead?

In Node 18.16.1 I saw that, but in Node 18.17.0 adding chai.should() makes it so that no err.code at all appears in the errors in data.details.error in the 'test:fail' TestStream event, yet the stack trace shows that its indeed a ERR_TEST_FAILURE in there somewhere.

This causes checks like these to fail:

const err = error.code === 'ERR_TEST_FAILURE' ? error.cause : error;

And eg. causes my diff of Chai errors in @voxpelli/node-test-pretty-reporter to no longer work (unless I do workarounds and check for the presence of the 'ERR_TEST_FAILURE' string in the stack).

Additional information

This is a follow up to #48900 (comment) and is probably caused by the #47867 that @MoLow mentioned in there and which fixed that issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions