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

Vue2结合Jest测试,如何验证组件导入的外部函数被调用?

问题原因与解决方案

错误原因

你的测试未生效的核心原因是:trackFavorite 是组件脚本顶部直接从 @/utils/analytics 导入的独立函数,不属于Vue实例的属性/方法。你给wrapper.vm.trackFavorite赋值mock函数,和组件内部调用的trackFavorite完全是两个不同的引用,自然不会生效。

正确实现

使用Jest的模块Mock能力直接替换整个@/utils/analytics模块的导出,再引入mock后的trackFavorite做断言即可,完整测试代码如下:

import { shallowMount } from '@vue/test-utils';
import FavoriteButton from '../FavoriteButton'
// 引入mock后的工具方法
import { trackFavorite } from "@/utils/analytics";

// 全局mock整个analytics模块的导出
jest.mock('@/utils/analytics', () => ({
  trackFavorite: jest.fn()
}))

describe("FavoriteButton", () => {
  let wrapper

  beforeEach(() => {
    // 每次用例执行前清空mock的调用记录,避免多个用例互相污染
    trackFavorite.mockClear()
    wrapper = shallowMount(FavoriteButton)
  })

  describe('.onFavorite', () => {
    it('触发方法时正确调用trackFavorite', () => {
      // 方式1:直接调用实例方法校验逻辑
      wrapper.vm.onFavorite()
      // 方式2:模拟点击按钮,更贴近用户真实操作场景,可二选一
      // wrapper.find('button').trigger('click')
      
      // 断言mock方法被调用且参数符合预期
      expect(trackFavorite).toHaveBeenCalledTimes(1)
      expect(trackFavorite).toHaveBeenCalledWith("click", "favorite")
    })
  })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:06:05