From 569a364933782a25bc13dae481d1470ce340eacf Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Wed, 23 Nov 2022 09:01:42 +0100 Subject: [PATCH] Add filter console test util (#9607) --- .../structures/auth/ForgotPassword-test.tsx | 11 +++- test/test-utils/console.ts | 51 +++++++++++++++++++ test/test-utils/index.ts | 1 + 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 test/test-utils/console.ts diff --git a/test/components/structures/auth/ForgotPassword-test.tsx b/test/components/structures/auth/ForgotPassword-test.tsx index cb379153c4..9f4b192aa9 100644 --- a/test/components/structures/auth/ForgotPassword-test.tsx +++ b/test/components/structures/auth/ForgotPassword-test.tsx @@ -22,7 +22,7 @@ import { MatrixClient, createClient } from "matrix-js-sdk/src/matrix"; import ForgotPassword from "../../../../src/components/structures/auth/ForgotPassword"; import { ValidatedServerConfig } from "../../../../src/utils/ValidatedServerConfig"; -import { flushPromisesWithFakeTimers, stubClient } from "../../../test-utils"; +import { filterConsole, flushPromisesWithFakeTimers, stubClient } from "../../../test-utils"; import Modal from "../../../../src/Modal"; import AutoDiscoveryUtils from "../../../../src/utils/AutoDiscoveryUtils"; @@ -39,6 +39,7 @@ describe("", () => { let serverConfig: ValidatedServerConfig; let onComplete: () => void; let renderResult: RenderResult; + let restoreConsole: () => void; const typeIntoField = async (label: string, value: string): Promise => { await act(async () => { @@ -55,6 +56,13 @@ describe("", () => { }; beforeEach(() => { + restoreConsole = filterConsole( + // not implemented by js-dom https://github.com/jsdom/jsdom/issues/1937 + "Not implemented: HTMLFormElement.prototype.requestSubmit", + // not of interested for this test + "Starting load of AsyncWrapper for modal", + ); + client = stubClient(); mocked(createClient).mockReturnValue(client); @@ -70,6 +78,7 @@ describe("", () => { afterEach(() => { // clean up modals Modal.closeCurrentModal("force"); + restoreConsole?.(); }); beforeAll(() => { diff --git a/test/test-utils/console.ts b/test/test-utils/console.ts new file mode 100644 index 0000000000..ff1ea0be09 --- /dev/null +++ b/test/test-utils/console.ts @@ -0,0 +1,51 @@ +/* +Copyright 2022 The Matrix.org Foundation C.I.C. + +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. +*/ + +type FilteredConsole = Pick; + +const originalFunctions: FilteredConsole = { + log: console.log, + error: console.error, + info: console.info, + debug: console.debug, + warn: console.warn, +}; + +/** + * Allows to filter out specific messages in console.*. + * + * @param ignoreList Messages to be filtered + * @returns function to restore the console + */ +export const filterConsole = (...ignoreList: string[]): () => void => { + for (const [key, originalFunction] of Object.entries(originalFunctions)) { + window.console[key as keyof FilteredConsole] = (...data: any[]) => { + const message = data?.[0]?.message || data?.[0]; + + if (typeof message === "string" && ignoreList.some(i => message.includes(i))) { + return; + } + + originalFunction(data); + }; + } + + return () => { + for (const [key, originalFunction] of Object.entries(originalFunctions)) { + window.console[key as keyof FilteredConsole] = originalFunction; + } + }; +}; diff --git a/test/test-utils/index.ts b/test/test-utils/index.ts index 17e8ad10c1..55b4779dc4 100644 --- a/test/test-utils/index.ts +++ b/test/test-utils/index.ts @@ -26,3 +26,4 @@ export * from './wrappers'; export * from './utilities'; export * from './date'; export * from './relations'; +export * from './console';