From efacb377b1b0735255617568a53529c1d60f8647 Mon Sep 17 00:00:00 2001 From: Yaroslav Serhieiev Date: Wed, 11 Oct 2023 10:31:07 +0300 Subject: [PATCH] fix: confusing error when no reporter (#46) --- e2e/jest-recorder.config.js | 10 +++++++ src/environment-hooks.ts | 32 +++++++++++++++-------- src/metadata/containers/GlobalMetadata.ts | 9 ++++--- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/e2e/jest-recorder.config.js b/e2e/jest-recorder.config.js index 4aa72fa..58123de 100644 --- a/e2e/jest-recorder.config.js +++ b/e2e/jest-recorder.config.js @@ -37,6 +37,16 @@ const presets = { ...mixins.env(true), ...mixins.workers(2), }, + 'no-reporter-1': { + ...mixins.env(true), + ...mixins.workers(2), + reporters: ['default'], + }, + 'no-reporter-N': { + ...mixins.env(true), + ...mixins.workers(2), + reporters: ['default'], + }, 'no-env-1': { ...mixins.env(false), ...mixins.workers(1), diff --git a/src/environment-hooks.ts b/src/environment-hooks.ts index 1636b12..07dff37 100644 --- a/src/environment-hooks.ts +++ b/src/environment-hooks.ts @@ -1,3 +1,4 @@ +import { inspect } from 'util'; import type { EnvironmentContext, JestEnvironment, JestEnvironmentConfig } from '@jest/environment'; import type { Circus } from '@jest/types'; import { JestMetadataError } from './errors'; @@ -6,14 +7,9 @@ import { SemiAsyncEmitter } from './utils'; const emitterMap: WeakMap> = new WeakMap(); -/** - * @param jestEnvironment {@link JestEnvironment} - * @param _jestEnvironmentConfig {@link JestEnvironmentConfig} - * @param environmentContext {@link EnvironmentContext} - */ export function onTestEnvironmentCreate( jestEnvironment: JestEnvironment, - _jestEnvironmentConfig: JestEnvironmentConfig, + jestEnvironmentConfig: JestEnvironmentConfig, environmentContext: EnvironmentContext, ): void { injectRealmIntoSandbox(jestEnvironment.global, realm); @@ -21,11 +17,25 @@ export function onTestEnvironmentCreate( realm.environmentHandler.handleEnvironmentCreated(testFilePath); realm.events.add(realm.setEmitter); - if (realm.type === 'child_process') { - realm.coreEmitter.emit({ - type: 'add_test_file', - testFilePath, - }); + if (!realm.globalMetadata.hasTestFileMetadata(testFilePath)) { + if (realm.type === 'child_process') { + realm.coreEmitter.emit({ + type: 'add_test_file', + testFilePath, + }); + } else { + const { globalConfig } = jestEnvironmentConfig; + const first = (r: T[]) => r[0]; + const hint = globalConfig?.reporters + ? ` "reporters": ${inspect(globalConfig.reporters.map(first))}\n` + : ''; // Jest 27 fallback + + throw new JestMetadataError( + `Cannot use a metadata test environment without a metadata server.\n` + + `Please check that at least one of the reporters in your Jest config inherits from "jest-metadata/reporter".\n` + + hint, + ); + } } const testEventHandler = ({ event, state }: ForwardedCircusEvent) => { diff --git a/src/metadata/containers/GlobalMetadata.ts b/src/metadata/containers/GlobalMetadata.ts index d7bde1a..708406d 100644 --- a/src/metadata/containers/GlobalMetadata.ts +++ b/src/metadata/containers/GlobalMetadata.ts @@ -31,12 +31,15 @@ export class GlobalMetadata extends BaseMetadata { } public getTestFileMetadata(testFilePath: string): TestFileMetadata { - const testFileMetadata = this[$byTestFilePath].get(testFilePath); - if (!testFileMetadata) { + if (!this.hasTestFileMetadata(testFilePath)) { throw new JestMetadataError(`No file metadata found for: ${testFilePath}`); } - return testFileMetadata; + return this[$byTestFilePath].get(testFilePath)!; + } + + public hasTestFileMetadata(testFilePath: string): boolean { + return this[$byTestFilePath].has(testFilePath); } public registerTestFile(testFilePath: string): TestFileMetadata {