From 33276bfbdbe352c3dbe9de7d40218fadc3b9cdc9 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Tue, 24 Feb 2026 12:44:26 +0000 Subject: [PATCH] Add `assertNotLogged` test helper --- src/testing-utils.ts | 48 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/src/testing-utils.ts b/src/testing-utils.ts index 3abc1f4f4..5f0bb607b 100644 --- a/src/testing-utils.ts +++ b/src/testing-utils.ts @@ -245,6 +245,32 @@ export function getRecordingLogger( }; } +/** + * Checks whether `messages` contains `messageOrRegExp`. + * + * If `messageOrRegExp` is a string, this function returns true as long as + * `messageOrRegExp` appears as part of one of the `messages`. + * + * If `messageOrRegExp` is a regular expression, this function returns true as long as + * one of the `messages` matches `messageOrRegExp`. + */ +function hasLoggedMessage( + messages: LoggedMessage[], + messageOrRegExp: string | RegExp, +): boolean { + const check = (val: string) => + typeof messageOrRegExp === "string" + ? val.includes(messageOrRegExp) + : messageOrRegExp.test(val); + + return messages.some( + (msg) => typeof msg.message === "string" && check(msg.message), + ); +} + +/** + * Checks that `messages` contains all of `expectedMessages`. + */ export function checkExpectedLogMessages( t: ExecutionContext, messages: LoggedMessage[], @@ -253,13 +279,7 @@ export function checkExpectedLogMessages( const missingMessages: string[] = []; for (const expectedMessage of expectedMessages) { - if ( - !messages.some( - (msg) => - typeof msg.message === "string" && - msg.message.includes(expectedMessage), - ) - ) { + if (!hasLoggedMessage(messages, expectedMessage)) { missingMessages.push(expectedMessage); } } @@ -276,6 +296,20 @@ export function checkExpectedLogMessages( } } +/** + * Asserts that `message` should not have been logged to `logger`. + */ +export function assertNotLogged( + t: ExecutionContext, + logger: RecordingLogger, + message: string | RegExp, +) { + t.false( + hasLoggedMessage(logger.messages, message), + `'${message}' should not have been logged, but was.`, + ); +} + /** * Initialises a recording logger and calls `body` with it. *