Refactor environment variable handling for Vitest integration

This commit is contained in:
Valentin Palkovic 2024-12-11 12:37:13 +01:00
parent bb1463327b
commit 41f52fab60
2 changed files with 14 additions and 22 deletions

View File

@ -1,25 +1,17 @@
export function getIsVitestStandaloneRun() {
try {
return process.env.VITEST_STORYBOOK === 'false';
} catch {
try {
// @ts-expect-error Suppress TypeScript warning about wrong setting. Doesn't matter, because we don't use tsc for bundling.
return import.meta.env.VITEST_STORYBOOK === 'false';
} catch (e) {
return false;
}
// @ts-expect-error Suppress TypeScript warning about wrong setting. Doesn't matter, because we don't use tsc for bundling.
return import.meta.env.VITEST_STORYBOOK === 'false';
} catch (e) {
return false;
}
}
export function getIsVitestRunning() {
try {
return process?.env.MODE === 'test';
} catch {
try {
// @ts-expect-error Suppress TypeScript warning about wrong setting. Doesn't matter, because we don't use tsc for bundling.
return import.meta.env.MODE === 'test';
} catch (e) {
return false;
}
// @ts-expect-error Suppress TypeScript warning about wrong setting. Doesn't matter, because we don't use tsc for bundling.
return import.meta.env.MODE === 'test';
} catch (e) {
return false;
}
}

View File

@ -23,7 +23,6 @@ import sirv from 'sirv';
import { convertPathToPattern } from 'tinyglobby';
import { dedent } from 'ts-dedent';
import { TestManager } from '../node/test-manager';
import type { InternalOptions, UserOptions } from './types';
const WORKING_DIR = process.cwd();
@ -143,6 +142,10 @@ export const storybookTest = async (options?: UserOptions): Promise<Plugin> => {
// plugin.name?.startsWith('vitest:browser')
// )
// We signal the test runner that we are not running it via Storybook
// We are overriding the environment variable to 'true' if vitest runs via @storybook/addon-test's backend
const vitestStorybook = process.env.VITEST_STORYBOOK ?? 'false';
const baseConfig: Omit<ViteUserConfig, 'plugins'> = {
test: {
setupFiles: [
@ -162,9 +165,8 @@ export const storybookTest = async (options?: UserOptions): Promise<Plugin> => {
...storybookEnv,
// To be accessed by the setup file
__STORYBOOK_URL__: finalOptions.storybookUrl,
// We signal the test runner that we are not running it via Storybook
// We are overriding the environment variable to 'true' if vitest runs via @storybook/addon-test's backend
VITEST_STORYBOOK: 'false',
VITEST_STORYBOOK: vitestStorybook,
__VITEST_INCLUDE_TAGS__: finalOptions.tags.include.join(','),
__VITEST_EXCLUDE_TAGS__: finalOptions.tags.exclude.join(','),
__VITEST_SKIP_TAGS__: finalOptions.tags.skip.join(','),
@ -239,8 +241,6 @@ export const storybookTest = async (options?: UserOptions): Promise<Plugin> => {
},
define: {
// polyfilling process.env.VITEST_STORYBOOK to 'false' in the browser
'process.env.VITEST_STORYBOOK': JSON.stringify('false'),
...(frameworkName?.includes('vue3')
? { __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'false' }
: {}),