diff --git a/packages/browser/src/client/orchestrator.ts b/packages/browser/src/client/orchestrator.ts index 29cba9927..75ecd6a8c 100644 --- a/packages/browser/src/client/orchestrator.ts +++ b/packages/browser/src/client/orchestrator.ts @@ -353,7 +353,7 @@ export class IframeOrchestrator { private createTestIframe(iframeId: string) { const iframe = document.createElement('iframe') - const src = `/?sessionId=${getBrowserState().sessionId}&iframeId=${iframeId}` + const src = `/?sessionId=${getBrowserState().sessionId}&iframeId=${encodeURIComponent(iframeId)}` const config = getConfig() iframe.setAttribute('loading', 'eager') diff --git a/test/browser/fixtures/file-path-encoding/a+b.test.ts b/test/browser/fixtures/file-path-encoding/a+b.test.ts new file mode 100644 index 000000000..ce0531a15 --- /dev/null +++ b/test/browser/fixtures/file-path-encoding/a+b.test.ts @@ -0,0 +1,5 @@ +import { expect, test } from 'vitest' + +test('runs a test from a file whose path contains a plus sign', () => { + expect(true).toBe(true) +}) diff --git a/test/browser/fixtures/file-path-encoding/vitest.config.ts b/test/browser/fixtures/file-path-encoding/vitest.config.ts new file mode 100644 index 000000000..d5b967f26 --- /dev/null +++ b/test/browser/fixtures/file-path-encoding/vitest.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + test: { + browser: { + enabled: true, + headless: true, + }, + }, +}) diff --git a/test/browser/specs/file-path-encoding.test.ts b/test/browser/specs/file-path-encoding.test.ts new file mode 100644 index 000000000..299b935a1 --- /dev/null +++ b/test/browser/specs/file-path-encoding.test.ts @@ -0,0 +1,20 @@ +import { expect, test } from 'vitest' +import { instances, provider, runBrowserTests } from './utils' + +test('runs tests from files whose path contains a plus sign', async () => { + const { stderr, stdout, exitCode } = await runBrowserTests({ + root: './fixtures/file-path-encoding', + reporters: ['verbose'], + browser: { + provider, + instances, + }, + }) + + expect(stderr).toBe('') + expect(exitCode).toBe(0) + + instances.forEach(({ browser }) => { + expect(stdout).toReportPassedTest('a+b.test.ts', browser) + }) +})