Skip to content

Commit 27a652c

Browse files
committed
feat(runtime-utils): allow mountSuspended, renderSuspended to work with use css modules component
1 parent c4638e4 commit 27a652c

File tree

5 files changed

+45
-2
lines changed

5 files changed

+45
-2
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<template>
2+
<div>
3+
Css Module
4+
<span
5+
id="s1"
6+
:class="$style.class1"
7+
/>
8+
<span
9+
id="s2"
10+
:class="$style.class1"
11+
/>
12+
<span id="s3" />
13+
</div>
14+
</template>
15+
16+
<style module>
17+
.class1 {
18+
color: red;
19+
}
20+
.class2 {
21+
color: blue;
22+
}
23+
</style>

examples/app-vitest-full/tests/nuxt/mount-suspended.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import ComponentWithAttrs from '~/components/ComponentWithAttrs.vue'
2525
import ComponentWithReservedProp from '~/components/ComponentWithReservedProp.vue'
2626
import ComponentWithReservedState from '~/components/ComponentWithReservedState.vue'
2727
import ComponentWithImports from '~/components/ComponentWithImports.vue'
28+
import ComponentWithCssVar from '~/components/ComponentWithCssVar.vue'
2829
import GenericStateComponent from '~/components/GenericStateComponent.vue'
2930

3031
import { BoundAttrs } from '#components'
@@ -275,6 +276,14 @@ describe('mountSuspended', () => {
275276
})
276277
})
277278

279+
it('can mount components with use css modules', async () => {
280+
const component = await mountSuspended(ComponentWithCssVar)
281+
expect(component.text()).toBe('Css Module')
282+
expect(component.find('#s1').classes()).toHaveLength(1)
283+
expect(component.find('#s2').classes()).toHaveLength(1)
284+
expect(component.find('#s3').classes()).toHaveLength(0)
285+
})
286+
278287
describe('Options API', () => {
279288
beforeEach(() => {
280289
vi.spyOn(console, 'error').mockImplementation((message) => {

examples/app-vitest-full/tests/nuxt/render-suspended.spec.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import DirectiveComponent from '~/components/DirectiveComponent.vue'
1212
import ExportDefaultComponent from '~/components/ExportDefaultComponent.vue'
1313
import ExportDefineComponent from '~/components/ExportDefineComponent.vue'
1414
import ComponentWithAttrs from '~/components/ComponentWithAttrs.vue'
15+
import ComponentWithCssVar from '~/components/ComponentWithCssVar.vue'
1516
import ExportDefaultWithRenderComponent from '~/components/ExportDefaultWithRenderComponent.vue'
1617
import ExportDefaultReturnsRenderComponent from '~/components/ExportDefaultReturnsRenderComponent.vue'
1718
import OptionsApiPage from '~/pages/other/options-api.vue'
@@ -170,6 +171,14 @@ describe('renderSuspended', () => {
170171
})
171172
})
172173

174+
it('can render components with use css modules', async () => {
175+
const { container, html } = await renderSuspended(ComponentWithCssVar)
176+
expect(html()).toContain('Css Module')
177+
expect(container.querySelector('#s1')?.classList).toHaveLength(1)
178+
expect(container.querySelector('#s2')?.classList).toHaveLength(1)
179+
expect(container.querySelector('#s3')?.classList).toHaveLength(0)
180+
})
181+
173182
describe('Options API', () => {
174183
beforeEach(() => {
175184
vi.spyOn(console, 'error').mockImplementation((message) => {

src/runtime-utils/mount.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ export async function mountSuspended<T>(
6666
const vueApp = tryUseNuxtApp()?.vueApp
6767
// @ts-expect-error untyped global __unctx__
6868
|| globalThis.__unctx__.get('nuxt-app').tryUse().vueApp
69-
const { render, setup, data, computed, methods } = component as DefineComponent<Record<string, unknown>, Record<string, unknown>>
69+
const { render, setup, data, computed, methods, ...componentRest } = component as DefineComponent<Record<string, unknown>, Record<string, unknown>>
7070

7171
let setupContext: SetupContext
7272
let setupState: Record<string, unknown>
@@ -144,6 +144,7 @@ export async function mountSuspended<T>(
144144
(resolve) => {
145145
const vm = mount(
146146
{
147+
__cssModules: componentRest.__cssModules,
147148
setup: (props: Record<string, unknown>, ctx: SetupContext) => {
148149
setupContext = ctx
149150

src/runtime-utils/render.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export async function renderSuspended<T>(component: T, options?: RenderOptions<T
6262
const vueApp = tryUseNuxtApp()?.vueApp
6363
// @ts-expect-error untyped global __unctx__
6464
|| globalThis.__unctx__.get('nuxt-app').tryUse().vueApp
65-
const { render, setup, data, computed, methods } = component as DefineComponent<Record<string, unknown>, Record<string, unknown>>
65+
const { render, setup, data, computed, methods, ...componentRest } = component as DefineComponent<Record<string, unknown>, Record<string, unknown>>
6666

6767
let setupContext: SetupContext
6868
let setupState: SetupState
@@ -132,6 +132,7 @@ export async function renderSuspended<T>(component: T, options?: RenderOptions<T
132132
return new Promise<ReturnType<typeof renderFromTestingLibrary> & { setupState: SetupState }>((resolve) => {
133133
const utils = renderFromTestingLibrary(
134134
{
135+
__cssModules: componentRest.__cssModules,
135136
setup: (props: Record<string, unknown>, ctx: SetupContext) => {
136137
setupContext = ctx
137138

0 commit comments

Comments
 (0)