Vue Test Utils 如何正确测试包含 slot 的组件? 码农含平 提问于 2026-03-24 11:02:24 阅读 48 框架 我写了一个带具名 slot 的子组件,但在用 Vue Test Utils 测试时,传入的 slot 内容好像没渲染出来,断言总是失败。是不是 mount 的时候 slot 传法不对? 这是我的组件模板: <template> <div class="card"> <header> <slot name="header"></slot> </header> <main> <slot></slot> </main> </div> </template> 我来解答 赞 3 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 Des.星瑶 Lv1 这个问题的关键是理解如何在 Vue Test Utils 中正确传递和渲染具名 slot 内容。当你使用 mount 函数挂载组件时,可以通过 slots 选项来传递 slot 内容。对于具名 slot,你需要在 slots 对象中指定具名。 首先,确保你的组件模板正确设置了具名 slot 和默认 slot。你已经做了这一步,看起来没问题。 接下来,让我们看看如何在测试中正确传递这些 slot 内容。这里有一个完整的测试示例: pre class="pure-highlightjs line-numbers">import { mount } from '@vue/test-utils' import CardComponent from '@/components/CardComponent.vue' describe('CardComponent', () => { it('renders content for default and named slots', () => { // 使用 mount 函数挂载组件,并通过 slots 选项传递内容 const wrapper = mount(CardComponent, { slots: { header: 'Test Header', // 传递给具名 slot "header" 的内容 default: 'Test Main Content' // 传递给默认 slot 的内容 } }) // 断言具名 slot 是否正确渲染 expect(wrapper.find('header h1').text()).toBe('Test Header') // 断言默认 slot 是否正确渲染 expect(wrapper.find('main p').text()).toBe('Test Main Content') }) }) /code> 在这个例子中,我们做了以下几步: 1. 使用 mount 函数挂载 CardComponent。 2. 在 slots 选项中,我们为具名 slot header 传递了 Test Header,并且为默认 slot 传递了 Test Main Content。 3. 使用 wrapper.find 方法查找渲染后的 DOM 元素,检查文本内容是否符合预期。 这样,测试就能正确地验证组件中的 slot 是否按照预期渲染了。如果断言仍然失败,请检查是否有其他因素影响了渲染,比如 CSS 样式导致元素不可见等。不过通常情况下,以上方法应该可以解决大部分 slot 渲染测试的问题。 回复 点赞 2026-03-24 11:03 加载更多 相关推荐
mount函数挂载组件时,可以通过slots选项来传递 slot 内容。对于具名 slot,你需要在slots对象中指定具名。首先,确保你的组件模板正确设置了具名 slot 和默认 slot。你已经做了这一步,看起来没问题。
接下来,让我们看看如何在测试中正确传递这些 slot 内容。这里有一个完整的测试示例:
pre class="pure-highlightjs line-numbers">
import { mount } from '@vue/test-utils'
import CardComponent from '@/components/CardComponent.vue'
describe('CardComponent', () => {
it('renders content for default and named slots', () => {
// 使用 mount 函数挂载组件,并通过 slots 选项传递内容
const wrapper = mount(CardComponent, {
slots: {
header: '
Test Header
', // 传递给具名 slot "header" 的内容default: '
Test Main Content
' // 传递给默认 slot 的内容}
})
// 断言具名 slot 是否正确渲染
expect(wrapper.find('header h1').text()).toBe('Test Header')
// 断言默认 slot 是否正确渲染
expect(wrapper.find('main p').text()).toBe('Test Main Content')
})
})
/code>
在这个例子中,我们做了以下几步:
1. 使用
mount函数挂载CardComponent。2. 在
slots选项中,我们为具名 slotheader传递了,并且为默认 slot 传递了Test Header
。Test Main Content
3. 使用
wrapper.find方法查找渲染后的 DOM 元素,检查文本内容是否符合预期。这样,测试就能正确地验证组件中的 slot 是否按照预期渲染了。如果断言仍然失败,请检查是否有其他因素影响了渲染,比如 CSS 样式导致元素不可见等。不过通常情况下,以上方法应该可以解决大部分 slot 渲染测试的问题。