Skip to content

Commit 92f187e

Browse files
committed
feat: add configure helper for render and VTU config
Provide a single configure({ render, vtu }) entry point while keeping VTU `config` and render configuration namespaced.
1 parent 53f4858 commit 92f187e

3 files changed

Lines changed: 45 additions & 3 deletions

File tree

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { page } from 'vitest/browser'
22
import { beforeEach } from 'vitest'
33
import { cleanup, render } from './pure'
44

5-
export { render, cleanup, config, configureRender } from './pure'
5+
export { render, cleanup, config, configure, configureRender } from './pure'
66
export type { ComponentRenderOptions, RenderConfiguration, RenderResult, WrapperComponent } from './pure'
77

88
page.extend({

src/pure.ts

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { Locator, LocatorSelectors, PrettyDOMOptions } from 'vitest/browser'
22
import { page, server, utils } from 'vitest/browser'
3-
import { type ComponentMountingOptions, type VueWrapper, mount } from '@vue/test-utils'
3+
import { type ComponentMountingOptions, type VueWrapper, mount, config as vtuConfig } from '@vue/test-utils'
44
import { type Component, type DefineComponent, defineComponent, h, nextTick, reactive } from 'vue'
55

66
export { config } from '@vue/test-utils'
@@ -15,6 +15,35 @@ export interface RenderConfiguration {
1515

1616
const renderConfig: RenderConfiguration = {}
1717

18+
export interface ConfigureOptions {
19+
/**
20+
* Configure vitest-browser-vue render behavior globally.
21+
* This is equivalent to calling {@link configureRender}.
22+
*/
23+
render?: Partial<RenderConfiguration>
24+
/**
25+
* Configure Vue Test Utils global config (`config.global`).
26+
*
27+
* This is a shallow merge into `@vue/test-utils` config.
28+
*/
29+
vtu?: Partial<(typeof vtuConfig)['global']>
30+
}
31+
32+
/**
33+
* Configure test utilities in one call.
34+
*
35+
* - `render`: vitest-browser-vue render configuration (e.g. global wrapper)
36+
* - `vtu`: Vue Test Utils global config (`config.global`)
37+
*/
38+
export function configure(options: ConfigureOptions): void {
39+
if (options.render) {
40+
configureRender(options.render)
41+
}
42+
if (options.vtu) {
43+
Object.assign(vtuConfig.global, options.vtu)
44+
}
45+
}
46+
1847
/**
1948
* Configure vitest-browser-vue options globally.
2049
*

test/render-wrapper.test.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { afterEach, expect, test } from 'vitest'
2-
import { configureRender, render } from 'vitest-browser-vue'
2+
import { configure, configureRender, render } from 'vitest-browser-vue'
33
import Emitter from './fixtures/Emitter.vue'
44
import InnerProvider from './fixtures/InnerProvider.vue'
55
import Label from './fixtures/Label.vue'
@@ -64,6 +64,19 @@ test('uses wrapper configured globally', async () => {
6464
expect(screen.container.querySelector('[data-provider="true"]')).not.toBeNull()
6565
})
6666

67+
test('configure({ render: { wrapper } }) configures global wrapper', async () => {
68+
configure({ render: { wrapper: Provider } })
69+
70+
const screen = await render(Label, {
71+
props: {
72+
label: 'Configured wrapper',
73+
},
74+
})
75+
76+
await expect.element(screen.getByText('Configured wrapper')).toBeVisible()
77+
expect(screen.container.querySelector('[data-provider="true"]')).not.toBeNull()
78+
})
79+
6780
test('per-render wrapper overrides global wrapper', async () => {
6881
configureRender({ wrapper: OuterProvider })
6982

0 commit comments

Comments
 (0)