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

如何用Jest创建图片Mock,验证动态返回的图片文件名?

解决动态图片导入的测试验证问题

核心方案:使用动态Mock解析图片文件名

不要用返回固定字符串的fileMock,而是编写一个根据导入路径动态返回文件名的Mock,这样就能适配gender参数带来的分支逻辑。

步骤1:创建自定义图片Mock文件

在项目根目录下的__mocks__文件夹(没有则新建)里创建fileMock.js:

module.exports = (filePath) => {
  // 从导入路径中提取最后一段(即文件名)
  return filePath.split('/').pop();
};

步骤2:配置测试框架指向该Mock

若使用Jest

在jest.config.js中修改moduleNameMapper:

module.exports = {
  // 其他配置...
  moduleNameMapper: {
    // 匹配所有常见图片格式,指向自定义Mock
    '\\.(svg|png|jpg|jpeg|gif)$': '<rootDir>/__mocks__/fileMock.js',
  },
};

若使用Vitest

在vitest.config.js中配置mock规则:

import { defineConfig } from 'vitest/config';

export default defineConfig({
  // 其他配置...
  test: {
    mockReset: true,
    environment: 'jsdom', // 需DOM环境时添加
    mock: {
      // 匹配图片文件,使用自定义Mock
      '\\.(svg|png|jpg)$': '<rootDir>/__mocks__/fileMock.js',
    },
  },
});

步骤3:编写测试用例验证

现在可以正常编写测试,验证不同gender下返回的图片文件名:

import getConfig from './path-to-your-function-file';

test('getConfig returns correct images for male gender', () => {
  const optionsData = getConfig('male');
  expect(optionsData[0].title).toBe('first title');
  expect(optionsData[0].image).toBe('fire.svg');
  expect(optionsData[1].image).toBe('wind.svg');
});

test('getConfig returns correct images for non-male gender', () => {
  const optionsData = getConfig('female');
  expect(optionsData[1].image).toBe('water.svg');
});

原理说明

之前的固定字符串Mock无法区分不同图片导入,而动态Mock会接收导入的文件路径作为参数,通过解析路径提取文件名,完美适配gender分支下的不同图片返回逻辑,同时避免了直接导入图片时产生的乱码或非预期内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:20:02