From 917c72d2791c856f49275e02c4615b5362ea58cc Mon Sep 17 00:00:00 2001 From: "paseo-bot[bot]" <266920839+paseo-bot[bot]@users.noreply.github.com> Date: Mon, 9 Nov 2026 20:53:53 +0000 Subject: [PATCH] test(app): load the image decoder in unit tests --- packages/app/vitest-environment.test.ts | 6 ++++++ packages/app/vitest.config.ts | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/packages/app/vitest-environment.test.ts b/packages/app/vitest-environment.test.ts index 95b9b9343b..9889a27588 100644 --- a/packages/app/vitest-environment.test.ts +++ b/packages/app/vitest-environment.test.ts @@ -14,6 +14,12 @@ const tsgoEntry = path.join( "bin/tsgo.js", ); +it("the test environment loads Expo Image", async () => { + const { Image } = await import("expo-image"); + + expect(Image).toEqual(expect.any(Function)); +}); + it("the test configuration typechecks with Expo's generated environment declaration", () => { const fixtureDir = mkdtempSync(path.join(appDir, ".vitest-expo-env-")); try { diff --git a/packages/app/vitest.config.ts b/packages/app/vitest.config.ts index 386f63305c..ef7edbb3e0 100644 --- a/packages/app/vitest.config.ts +++ b/packages/app/vitest.config.ts @@ -19,6 +19,23 @@ const resolvePackageEntry = (packageName: string) => { export default defineConfig({ plugins: [ + { + name: "bundle-expo-runtime", + // Expo initializes import.meta through a literal require of TypeScript. + // Bundle that boundary so Node need not resolve Metro's extensionless require. + async transform(_source, id) { + if (!id.endsWith("/expo/src/winter/runtime.ts")) return; + const result = await build({ + entryPoints: [id], + bundle: true, + format: "esm", + platform: "neutral", + define: { __DEV__: "false" }, + write: false, + }); + return { code: result.outputFiles[0].text, map: null }; + }, + }, { name: "markdown-wasm-commonjs-export", transform(source, id) {