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

Vitest排除指定文件/文件夹失效及react-i18n Mock问题求助

Jest迁移Vitest:排除文件夹无效+react-i18next Mock报错解决方案

问题背景

将项目从Jest迁移至Vitest时,配置exclude规则想要排除src/config目录,避免其参与测试执行和覆盖率统计,但规则未生效——运行测试时,该目录下无测试文件的i18n.ts抛出了错误。

环境信息

  • Windows 11
  • Node.js 16.14.0
  • Vite 3.1.0
  • Vitest 0.23.4

排查结果与解决方案

经排查,问题根源并非exclude配置错误,而是src/config/setupTests.ts中对react-i18next的Mock代码写法有误:

  • 非异步调用vi.importActual会触发TypeScript类型报错,进而导致src/config目录下的依赖文件被加载并抛出错误
  • 改用异步Mock写法,并添加@ts-ignore忽略类型冲突后,问题解决

当前有效配置(vite.config.ts)

/// <reference types="vitest" />
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import tsconfigPaths from 'vite-tsconfig-paths';

export default defineConfig({
  plugins: [
    react(),
    tsconfigPaths(),
  ],
  test: {
    globals: true,
    environment: 'jsdom',
    setupFiles: './src/config/setupTests.ts',
    css: true,
    mockReset: true,
    restoreMocks: true,
    clearMocks: true,
    include: ['./src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'],
    exclude: [
      '**/node_modules/**',
      '**/dist/**',
      '**/cypress/**',
      '**/.{idea,git,cache,output,temp}/**',
      './src/config/**',
    ],
    coverage: {
      exclude: ['./src/config'],
    },
  },
});

Mock代码对比

无效写法

// 写法1
vi.mock('react-i18next', () => ({
  ...vi.importActual('react-i18next'),
  useTranslation: () => [(key: any) => key],
}));

// 写法2
vi.mock('react-i18next', () => {
  const actual = vi.importActual('react-i18next'),
  return {
         ...actual, 
         useTranslation: () => [(key: any) => key],
   };
}); 

有效写法

vi.mock('react-i18next', async () => {
  const actual = await vi.importActual('react-i18next');
  return {
    // @ts-ignore
    ...actual,
    useTranslation: () => [(key: any) => key],
  };
});

内容的提问来源于stack exchange,提问作者j.doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:15:25