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

Nuxt.js使用Vue Test Utils测试时$cookies.get未定义如何修复?

报错原因
  • $cookies 是Nuxt框架注入到组件实例的全局属性,单元测试环境默认不会自动注入该依赖,导致组件内访问$cookies时得到undefined,调用get方法直接触发类型错误。
  • 当前的axios mock逻辑与实际调用不兼容:组件中使用的是Nuxt挂载的全局$axios.$put方法,你的测试仅mock了原生axios.put,也没有将mock实例注入到测试组件的全局属性中,即使修复cookies问题后也会触发axios相关报错。
  • 原axios mock的返回逻辑存在缺陷:jest.mock中定义的put方法没有显式返回值,调用后会返回undefined,无法匹配异步调用的预期。
修复方案

挂载组件时手动注入所有需要的全局mock依赖,同时修正axios的mock规则匹配Nuxt的调用格式,修改后的测试代码如下:

import { shallowMount } from "@vue/test-utils";
import MyComponent from "~/components/MyComponent/index.vue";

const mockRes = { code: 200 };

// 调整mock规则适配Nuxt的$axios.$put调用
jest.mock("axios", () => ({
  $put: jest.fn(() => Promise.resolve(mockRes))
}));

describe("MyComponent.vue", () => {
  const wrapper = shallowMount(MyComponent, {
    // Vue2版本test-utils请去掉外层global,直接将mocks放在二级参数下
    global: {
      mocks: {
        // 注入mock的cookies实例
        $cookies: {
          get: jest.fn((key) => key === "token" ? "test_fake_token" : null)
        },
        // 注入mock后的axios实例
        $axios: require("axios")
      }
    }
  });

  test("should do something", async () => {
    await wrapper.find('[data-test="do-something"]').trigger("click");
    // 可添加断言验证调用逻辑符合预期
    expect(wrapper.vm.$cookies.get).toHaveBeenCalledWith("token");
    expect(wrapper.vm.$axios.$put).toHaveBeenCalledTimes(1);
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:36:10