diff --git a/packages/wxt/src/core/runners/__tests__/web-ext.test.ts b/packages/wxt/src/core/runners/__tests__/web-ext.test.ts new file mode 100644 index 000000000..2eb4a5175 --- /dev/null +++ b/packages/wxt/src/core/runners/__tests__/web-ext.test.ts @@ -0,0 +1,42 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import webExt from 'web-ext'; +import { setFakeWxt } from '../../utils/testing/fake-objects'; +import { createWebExtRunner } from '../web-ext'; + +vi.mock('web-ext', () => ({ + default: { + cmd: { + run: vi.fn().mockResolvedValue({ exit: vi.fn() }), + }, + }, +})); +vi.mock('web-ext/util/logger', () => ({ consoleStream: {} })); + +describe('createWebExtRunner', () => { + beforeEach(() => { + setFakeWxt({ + config: { + browser: 'chrome', + outDir: '/root/.output/chrome-mv3', + webExt: { + config: { + chromiumProfile: '/root/.wxt/chrome-data', + keepProfileChanges: true, + }, + }, + }, + }); + }); + + it('creates a missing custom Chromium profile before launching', async () => { + await createWebExtRunner().openBrowser(); + + expect(webExt.cmd.run).toHaveBeenCalledWith( + expect.objectContaining({ + chromiumProfile: '/root/.wxt/chrome-data', + profileCreateIfMissing: true, + }), + { shouldExitProgram: false }, + ); + }); +}); diff --git a/packages/wxt/src/core/runners/web-ext.ts b/packages/wxt/src/core/runners/web-ext.ts index 90d64e4c7..15157b054 100644 --- a/packages/wxt/src/core/runners/web-ext.ts +++ b/packages/wxt/src/core/runners/web-ext.ts @@ -40,6 +40,7 @@ export function createWebExtRunner(): ExtensionRunner { : { chromiumBinary: wxtUserConfig?.binaries?.[wxt.config.browser], chromiumProfile: wxtUserConfig?.chromiumProfile, + profileCreateIfMissing: !!wxtUserConfig?.chromiumProfile, chromiumPref: defu( wxtUserConfig?.chromiumPref, DEFAULT_CHROMIUM_PREFS,