From 067b2eccf33a2afe87329e6d5dce85fc183c4b17 Mon Sep 17 00:00:00 2001 From: Aaron Date: Sun, 18 Aug 2024 14:56:15 -0500 Subject: [PATCH] fix(testing): Stub `chrome` and `browser` globals with `fakeBrowser` automatically (#925) --- .../builders/vite/plugins/extensionApiMock.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/packages/wxt/src/core/builders/vite/plugins/extensionApiMock.ts b/packages/wxt/src/core/builders/vite/plugins/extensionApiMock.ts index f7d6d863..7724219e 100644 --- a/packages/wxt/src/core/builders/vite/plugins/extensionApiMock.ts +++ b/packages/wxt/src/core/builders/vite/plugins/extensionApiMock.ts @@ -11,6 +11,9 @@ import { ResolvedConfig } from '../../../../types'; * `npm list` and inline them automatically. */ export function extensionApiMock(config: ResolvedConfig): vite.PluginOption { + const virtualSetupModule = 'virtual:wxt-setup'; + const resolvedVirtualSetupModule = '\0' + virtualSetupModule; + return { name: 'wxt:extension-api-mock', config() { @@ -19,6 +22,9 @@ export function extensionApiMock(config: ResolvedConfig): vite.PluginOption { 'dist/virtual/mock-browser', ); return { + test: { + setupFiles: [virtualSetupModule], + }, resolve: { alias: [ { find: 'webextension-polyfill', replacement }, @@ -33,5 +39,19 @@ export function extensionApiMock(config: ResolvedConfig): vite.PluginOption { }, }; }, + resolveId(id) { + if (id.endsWith(virtualSetupModule)) return resolvedVirtualSetupModule; + }, + load(id) { + if (id === resolvedVirtualSetupModule) return setupTemplate; + }, }; } + +const setupTemplate = ` + import { vi } from 'vitest'; + import { fakeBrowser } from 'wxt/testing'; + + vi.stubGlobal("chrome", fakeBrowser); + vi.stubGlobal("browser", fakeBrowser); +`;