diff --git a/packages/internal-test-utils/__tests__/ReactInternalTestUtils-test.js b/packages/internal-test-utils/__tests__/ReactInternalTestUtils-test.js index fa985ef9948..1ee1bcf2b56 100644 --- a/packages/internal-test-utils/__tests__/ReactInternalTestUtils-test.js +++ b/packages/internal-test-utils/__tests__/ReactInternalTestUtils-test.js @@ -2413,6 +2413,32 @@ describe('ReactInternalTestUtils console assertions', () => { If all errors should include the component stack, you may need to remove {withoutStack: true} from the assertConsoleErrorDev call." `); }); + + // @gate __DEV__ + it('fails with a helpful error message if the expected error message mismatches', () => { + const message = expectToThrowFailure(() => { + console.error('Bye\n in div'); + assertConsoleErrorDev([ + [ + 'Hello', + { + withoutStack: true, + }, + ], + ]); + }); + expect(message).toMatchInlineSnapshot(` + "assertConsoleErrorDev(expected) + + Unexpected error(s) recorded. + + - Expected errors + + Received errors + + - Hello + + Bye " + `); + }); }); // @gate __DEV__ diff --git a/packages/internal-test-utils/consoleMock.js b/packages/internal-test-utils/consoleMock.js index 3b9ef2f8c0e..45a59d2b4cb 100644 --- a/packages/internal-test-utils/consoleMock.js +++ b/packages/internal-test-utils/consoleMock.js @@ -464,7 +464,12 @@ export function createLogAssertion( function printDiff() { return `${diff( expectedMessages - .map(message => message.replace('\n', ' ')) + .map(messageOrTuple => { + const message = Array.isArray(messageOrTuple) + ? messageOrTuple[0] + : messageOrTuple; + return message.replace('\n', ' '); + }) .join('\n'), receivedLogs.map(message => message.replace('\n', ' ')).join('\n'), {