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

Vue3组合式API全局Mock vue-i18n的t函数解决测试警告

Vue3组合式API下全局Mock vue-i18n的t函数问题

我正在使用Jest、vue-test-utils和Vue3(组合式API),想要全局模拟vue-i18n的t('key')函数。在选项式API中,只需在jest.init.js里配置config.global.mocks就能实现,但使用组合式API的const { t } = useI18n()时,尝试了部分Mock vue-i18n模块的方法后,运行测试仍出现Vue警告:

console.warn [Vue warn]: Property "t" was accessed during render but is not defined on instance.

已参考相关帖子但未能解决问题,附上i18n配置及组件代码,寻求解决办法。


解决方案

在Jest初始化文件中添加以下代码,采用部分Mock模块的方式实现全局模拟。注意:如果测试中使用jest.resetAllMocks()会重置此Mock导致失效,这种情况下建议改用在单个测试文件中单独配置Mock的方案。

// jest.init.js
import { createI18n, useI18n } from "vue-i18n";

jest.mock("vue-i18n", () => {
  return {
    ...jest.requireActual("vue-i18n"),
    useI18n: jest.fn().mockReturnValue({
      t: (key) => key,
    }),
  };
});

附配置及组件代码

i18n配置

const i18n = createI18n({
  legacy: false, 
  messages, // 设置本地化消息
  // 其他选项
});

export { i18n };

组件代码

<template>
  <p>{{ t("foo.bar.route.description") }}</p>
</template>

<script>
import { useI18n } from "vue-i18n";

export default {
  name: "Foo",
  setup() {
    const { t } = useI18n();

    return {
      t,
    };
  },
};
</script>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:42:51