You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue Jest测试中trigger('click')失效问题:点击按钮无法触发下拉菜单展开

Vue Test Utils: trigger('click') not activating Bootstrap Dropdown in Jest Test

我看了你的测试代码和DOM结构,问题大概率出在这几个地方,咱们一步步来排查:

1. 下拉菜单的选择器错了

你在测试里用#nom-divUpperDrop找下拉菜单,但你贴出来的DOM里,目标下拉菜单根本没有这个ID——实际它的标识是aria-labelledby="nom-dropdown"和class="dropdown-menu"。这就导致你拿到的dropdown是个空的Wrapper,自然查不到.show类。

怎么改:
把选择器换成能正确定位到下拉菜单的,比如:

// 通过关联的按钮ID定位(最准确)
const dropdown = wrapper.find('[aria-labelledby="nom-dropdown"]')
// 或者如果页面里只有这一个dropdown,用class也可以
// const dropdown = wrapper.find('.dropdown-menu')

2. Bootstrap的Dropdown没在测试环境中初始化

Bootstrap的下拉组件是靠它自己的JS库来处理点击事件、切换.show类的。在浏览器里,页面加载后Bootstrap会自动初始化所有带data-bs-toggle="dropdown"的元素,但Jest测试环境里,组件挂载后不会自动做这个初始化,所以你用trigger('click')只是触发了原生点击,没触发Bootstrap的逻辑。

怎么改:
在测试里手动初始化Dropdown:
首先确保你项目里装了bootstrap包,然后在测试文件里导入并初始化:

import { mount } from '@vue/test-utils'
import { Dropdown } from 'bootstrap' // 导入Bootstrap的Dropdown类
import YourComponent from '@/components/YourComponent.vue' // 替换成你的组件路径

describe('test clique boutton filtre', () => {
  test('should show dropdown de la colonne 1', async () => {
    const wrapper = mount(YourComponent)
    const button = wrapper.find('#nom-dropdown')
    const dropdown = wrapper.find('[aria-labelledby="nom-dropdown"]')

    // 手动初始化这个按钮的Dropdown实例
    new Dropdown(button.element)

    // 触发点击,然后等Vue更新DOM
    await button.trigger('click')
    await wrapper.vm.$nextTick()

    // 断言下拉菜单有.show类
    expect(dropdown.classes()).toContain('show')
  })
})

3. Async测试里别用done回调

你的测试同时用了async和done,这会搞混Jest的异步处理逻辑——async函数本身会返回Promise,Jest会自动等这个Promise完成,不需要再调用done()。留着done反而可能导致测试超时。

怎么改:
直接删掉done参数和done()调用就行。

4. 多等一下DOM更新

有时候光await button.trigger('click')不够,得等Vue完成一轮DOM更新。加个await wrapper.vm.$nextTick()能确保所有DOM变化都完成了再断言。

额外小技巧

你可以在测试里加一行console.log(dropdown.html()),打印出下拉菜单的DOM,看看选择器对不对,点击后有没有加上.show类,这样排查问题更直观。

内容的提问来源于stack exchange,提问作者Lanfeust2000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 10:17:39