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

如何在Jest中测试Vue组件的activated生命周期钩子

Vue组件activated钩子的Jest测试方案

核心前提

activated 钩子仅在被<keep-alive>包裹的组件中触发,这是多数测试失败的关键——若测试时未将组件放入<keep-alive>,钩子根本不会执行。


Vue 2 测试代码示例

假设目标组件为UserForm.vue,测试文件UserForm.spec.js:

import { shallowMount, createLocalVue } from '@vue/test-utils'
import UserForm from '@/components/UserForm.vue'

const localVue = createLocalVue()

describe('UserForm activated 钩子', () => {
  it('触发后清空表单数据', () => {
    // 用keep-alive包裹组件挂载
    const wrapper = shallowMount(UserForm, {
      localVue,
      parentComponent: {
        template: '<keep-alive><user-form /></keep-alive>',
        components: { UserForm }
      }
    })

    // 先设置非空测试值
    wrapper.vm.name = 'John Doe'
    wrapper.vm.emailAddress = 'john@example.com'
    wrapper.vm.birthdate = '1990-01-01'

    // 手动触发activated钩子
    wrapper.vm.activated()

    // 验证数据是否清空
    expect(wrapper.vm.name).toBe('')
    expect(wrapper.vm.emailAddress).toBe('')
    expect(wrapper.vm.birthdate).toBe('')
  })
})

Vue 3 测试代码示例

Vue 3 中测试工具API有所调整,测试代码如下:

import { mount } from '@vue/test-utils'
import UserForm from '@/components/UserForm.vue'
import { KeepAlive } from 'vue'

describe('UserForm activated 钩子', () => {
  it('触发后清空表单数据', async () => {
    // 用KeepAlive包裹组件挂载
    const wrapper = mount({
      components: { UserForm, KeepAlive },
      template: '<KeepAlive><UserForm ref="form" /></KeepAlive>'
    })

    const formVm = wrapper.findComponent(UserForm).vm

    // 设置非空测试值
    formVm.name = 'Jane Smith'
    formVm.emailAddress = 'jane@example.com'
    formVm.birthdate = '1995-05-05'

    // 手动触发activated钩子
    formVm.activated()

    // 验证数据清空
    expect(formVm.name).toBe('')
    expect(formVm.emailAddress).toBe('')
    expect(formVm.birthdate).toBe('')
  })
})

常见问题排查

  • 若之前方案失效,优先检查组件是否被<keep-alive>包裹,普通组件挂载不会触发activated钩子。
  • 测试前必须给目标数据设置非空初始值,否则断言空值无意义。
  • Vue 3 中需确保正确从vue包导入KeepAlive组件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:57:24