Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
32d5726
perf(browser): improve browser parallelisation
sheremet-va Mar 12, 2025
1a47659
chore: undo lockfile change
sheremet-va Mar 12, 2025
bd16578
refactor: a lot of stuff
sheremet-va Mar 13, 2025
8253d5d
chore: cleanup
sheremet-va Mar 13, 2025
8c64611
chore: restrict isolated parallelism for now
sheremet-va Mar 13, 2025
18fe445
chore: cleanup
sheremet-va Mar 13, 2025
6a2ae8d
chore: cleanup
sheremet-va Mar 13, 2025
3e4fe4b
fix: support dynamic context
sheremet-va Mar 14, 2025
6e8c1db
fix: remove timeout from createTesters
sheremet-va Mar 14, 2025
16fc7ac
chore: cleanup
sheremet-va Mar 14, 2025
1b8b1fb
fix: run non-isolated tests correctly
sheremet-va Mar 14, 2025
bbf0087
fix: correctly fail the test run if html threw an error
sheremet-va Mar 14, 2025
3b2d902
chore: chore
sheremet-va Mar 17, 2025
3d5bc68
Merge branch 'main' of github.com:vitest-dev/vitest into perf/browser…
sheremet-va Mar 24, 2025
e67a7eb
chore: fix snapshot
sheremet-va Mar 24, 2025
741fd96
fix: throw an error if createTester hangs
sheremet-va Mar 24, 2025
67f9577
test: fix cdp test
sheremet-va Mar 24, 2025
1f55264
fix: check for iframe if UI rerendered it
sheremet-va Mar 24, 2025
a404acf
chore: add debugs
sheremet-va Mar 24, 2025
3275269
fix: correctly run tests
sheremet-va Mar 24, 2025
05ae561
feat: update the error message when the page crushes
sheremet-va Mar 25, 2025
d7559b7
chore: support array in toReportPassedTest
sheremet-va Mar 26, 2025
af78258
Merge branch 'main' of github.com:vitest-dev/vitest into perf/browser…
sheremet-va Mar 26, 2025
57c78ae
refactor: cleanup pool
sheremet-va Mar 26, 2025
4f13278
chore: debug logs in setup file
sheremet-va Mar 26, 2025
4a77297
Merge branch 'main' into perf/browser-parallelisation
sheremet-va Mar 27, 2025
a31b738
Merge branch 'main' of github.com:vitest-dev/vitest into perf/browser…
sheremet-va Mar 31, 2025
c58a06e
chore: cleanup
sheremet-va Mar 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 36 additions & 32 deletions packages/browser/src/client/channel.ts
Original file line number Diff line number Diff line change
@@ -1,40 +1,58 @@
import type { CancelReason } from '@vitest/runner'
import { getBrowserState } from './utils'

export interface IframeDoneEvent {
type: 'done'
filenames: string[]
id: string
export interface IframeViewportEvent {
event: 'viewport'
width: number
height: number
iframeId: string
}

export interface IframeErrorEvent {
type: 'error'
error: any
errorType: string
files: string[]
id: string
export interface IframeViewportFailEvent {
event: 'viewport:fail'
iframeId: string
error: string
}

export interface IframeViewportEvent {
type: 'viewport'
width: number
height: number
id: string
export interface IframeViewportDoneEvent {
event: 'viewport:done'
iframeId: string
}

export interface GlobalChannelTestRunCanceledEvent {
type: 'cancel'
reason: CancelReason
}

export interface IframeExecuteEvent {
event: 'execute'
method: 'run' | 'collect'
files: string[]
iframeId: string
context: string
}

export interface IframeCleanupEvent {
event: 'cleanup'
iframeId: string
}

export interface IframePrepareEvent {
event: 'prepare'
iframeId: string
}

export type GlobalChannelIncomingEvent = GlobalChannelTestRunCanceledEvent

export type IframeChannelIncomingEvent =
| IframeViewportEvent
| IframeErrorEvent
| IframeDoneEvent

export type IframeChannelOutgoingEvent = never
export type IframeChannelOutgoingEvent =
| IframeExecuteEvent
| IframeCleanupEvent
| IframePrepareEvent
| IframeViewportFailEvent
| IframeViewportDoneEvent

export type IframeChannelEvent =
| IframeChannelIncomingEvent
Expand All @@ -44,17 +62,3 @@ export const channel: BroadcastChannel = new BroadcastChannel(
`vitest:${getBrowserState().sessionId}`,
)
export const globalChannel: BroadcastChannel = new BroadcastChannel('vitest:global')

export function waitForChannel(event: IframeChannelOutgoingEvent['type']): Promise<void> {
return new Promise<void>((resolve) => {
channel.addEventListener(
'message',
(e) => {
if (e.data?.type === event) {
resolve()
}
},
{ once: true },
)
})
}
17 changes: 13 additions & 4 deletions packages/browser/src/client/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,19 @@ function createClient() {
ctx.rpc = createBirpc<WebSocketBrowserHandlers, WebSocketBrowserEvents>(
{
onCancel: setCancel,
async createTesters(files: string[]) {
if (PAGE_TYPE !== 'orchestrator') {
return
async createTesters(options) {
const orchestrator = getBrowserState().orchestrator
if (!orchestrator) {
throw new TypeError('Only orchestrator can create testers.')
}
return orchestrator.createTesters(options)
},
async cleanupTesters() {
const orchestrator = getBrowserState().orchestrator
if (!orchestrator) {
throw new TypeError('Only orchestrator can cleanup testers.')
}
getBrowserState().createTesters?.(files)
return orchestrator.cleanupTesters()
},
cdpEvent(event: string, payload: unknown) {
const cdp = getBrowserState().cdp
Expand Down Expand Up @@ -85,6 +93,7 @@ function createClient() {
{
post: msg => ctx.ws.send(msg),
on: fn => (onMessage = fn),
timeout: -1, // createTesters can take a while
serialize: e =>
stringify(e, (_, v) => {
if (v instanceof Error) {
Expand Down
Loading
Loading