fix(test): load shared mocks via vi.hoisted, not a static import
CI caught that vi.mock('$app/forms', () => ({ ...formsMock })) with a
static `import * as formsMock` fails: vitest hoists vi.mock above the
import, so the factory references an uninitialised binding
("no top level variables inside"). Load the shared mock module via
`const formsMock = await vi.hoisted(() => import('$mocks/...'))` instead —
the factory may reference a vi.hoisted binding, and the dynamic import runs
at collection time (not in the lazily-invoked factory), so it stays clear
of ADR-012's birpc race and the no-async-mock-factories guard. Applies to
all 5 shared-mock consumers ($app/forms x4, $app/navigation x1). Part of #560.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@ import { page, userEvent } from 'vitest/browser';
|
|||||||
|
|
||||||
import ChronikFuerDichBox from './ChronikFuerDichBox.svelte';
|
import ChronikFuerDichBox from './ChronikFuerDichBox.svelte';
|
||||||
import type { NotificationItem } from '$lib/notification/notifications.svelte';
|
import type { NotificationItem } from '$lib/notification/notifications.svelte';
|
||||||
import * as formsMock from '$mocks/$app/forms';
|
const formsMock = await vi.hoisted(() => import('$mocks/$app/forms'));
|
||||||
|
|
||||||
vi.mock('$app/forms', () => ({ ...formsMock }));
|
vi.mock('$app/forms', () => ({ ...formsMock }));
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { cleanup, render } from 'vitest-browser-svelte';
|
|||||||
import { page } from 'vitest/browser';
|
import { page } from 'vitest/browser';
|
||||||
import ChronikFuerDichBox from './ChronikFuerDichBox.svelte';
|
import ChronikFuerDichBox from './ChronikFuerDichBox.svelte';
|
||||||
import type { NotificationItem } from '$lib/notification/notifications';
|
import type { NotificationItem } from '$lib/notification/notifications';
|
||||||
import * as formsMock from '$mocks/$app/forms';
|
const formsMock = await vi.hoisted(() => import('$mocks/$app/forms'));
|
||||||
|
|
||||||
vi.mock('$app/forms', () => ({ ...formsMock }));
|
vi.mock('$app/forms', () => ({ ...formsMock }));
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ import { afterEach, beforeEach, describe, it, expect, vi } from 'vitest';
|
|||||||
import { cleanup, render } from 'vitest-browser-svelte';
|
import { cleanup, render } from 'vitest-browser-svelte';
|
||||||
import { m } from '$lib/paraglide/messages.js';
|
import { m } from '$lib/paraglide/messages.js';
|
||||||
import type { NotificationItem } from '$lib/notification/notifications';
|
import type { NotificationItem } from '$lib/notification/notifications';
|
||||||
import * as formsMock from '$mocks/$app/forms';
|
|
||||||
import NotificationFixture from './notification.test-fixture.svelte';
|
import NotificationFixture from './notification.test-fixture.svelte';
|
||||||
|
|
||||||
|
const formsMock = await vi.hoisted(() => import('$mocks/$app/forms'));
|
||||||
|
|
||||||
vi.mock('$app/navigation', () => ({ goto: vi.fn(), beforeNavigate: vi.fn() }));
|
vi.mock('$app/navigation', () => ({ goto: vi.fn(), beforeNavigate: vi.fn() }));
|
||||||
vi.mock('$app/forms', () => ({ ...formsMock }));
|
vi.mock('$app/forms', () => ({ ...formsMock }));
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { cleanup, render } from 'vitest-browser-svelte';
|
|||||||
import { page } from 'vitest/browser';
|
import { page } from 'vitest/browser';
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
import NotificationDropdown from './NotificationDropdown.svelte';
|
import NotificationDropdown from './NotificationDropdown.svelte';
|
||||||
import * as formsMock from '$mocks/$app/forms';
|
const formsMock = await vi.hoisted(() => import('$mocks/$app/forms'));
|
||||||
|
|
||||||
vi.mock('$app/navigation', () => ({ goto: vi.fn() }));
|
vi.mock('$app/navigation', () => ({ goto: vi.fn() }));
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { describe, it, expect, vi } from 'vitest';
|
import { describe, it, expect, vi } from 'vitest';
|
||||||
import * as navMock from '$mocks/$app/navigation';
|
const navMock = await vi.hoisted(() => import('$mocks/$app/navigation'));
|
||||||
|
|
||||||
vi.mock('$app/navigation', () => ({ ...navMock }));
|
vi.mock('$app/navigation', () => ({ ...navMock }));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user