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

如何在Cypress组件测试中加载fixtures文件夹中的图片?

用Cypress本地Fixture图片替换API返回图片的两种方案

你之前写的../fixtures/Banner.jpg无效,是因为浏览器环境无法直接访问本地文件系统路径,得用Cypress提供的方式处理,以下是两种可行方案:

方案1:返回Base64格式图片(无需额外拦截)

这种方式把本地图片转成Base64字符串,作为API响应的url返回,组件的img会直接渲染这个字符串,不用再发起图片请求。

修改后的测试代码:

import React from 'react';
import Logo from '../../src/logo/logo';

const allApiInterceptors = () => {
  // 读取fixture里的图片并转成base64编码
  cy.fixture('Banner.jpg', 'base64').then(base64Data => {
    const imageDataUrl = `data:image/jpeg;base64,${base64Data}`;
    cy.intercept('/logos/123456', {
      id: 5295911,
      url: imageDataUrl
    });
  });
};

describe('Logo', () => {
  beforeEach(() => {
    allApiInterceptors();
  });
  it('mounts and renders local fixture image', () => {
    cy.mount(<Logo />);
    // 可选:验证图片是否正常显示
    cy.get('img').should('be.visible');
  });
});

方案2:拦截图片请求返回Fixture

如果想保留URL形式,先让API返回一个自定义图片地址,再拦截这个地址的请求,返回本地Fixture:

修改后的测试代码:

import React from 'react';
import Logo from '../../src/logo/logo';

const allApiInterceptors = () => {
  // 1. 拦截API,返回自定义的图片URL
  cy.intercept('/logos/123456', {
    id: 5295911,
    url: '/mock-logo.jpg'
  });

  // 2. 拦截自定义URL的请求,返回本地fixture图片
  cy.intercept('GET', '/mock-logo.jpg', {
    fixture: 'Banner.jpg'
  });
};

describe('Logo', () => {
  beforeEach(() => {
    allApiInterceptors();
  });
  it('mounts and renders local fixture image', () => {
    cy.mount(<Logo />);
    cy.get('img').should('have.attr', 'src', '/mock-logo.jpg');
    cy.get('img').should('be.visible');
  });
});

两种方案按需选择:方案1更直接,无需额外处理图片请求;方案2更贴近真实场景的URL模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:28:13