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

Cypress组件测试时图片资源加载失败问题求助

Cypress组件测试中Hero组件图片404问题解决

你遇到的问题根源是:测试代码里传入的image.url指向了CMS的真实资源路径,但本地Cypress测试环境并没有对应的图片文件,所以浏览器发起请求后返回404。而测试能通过,是因为你的测试逻辑只校验了标题的文本和可见性,没有涉及图片的加载状态,所以不影响测试结果,但UI层面会显示图片加载失败。

下面是几种可行的解决方法:

  • 用本地占位图替换CMS URL
    直接修改测试用的props,把图片地址换成项目本地存在的图片(比如public目录下的占位图):

    const prop = {
      heading: 'Heading for heading test',
      description: 'Description for description test',
      image: {
        id: 'test id',
        url: '/test-hero-placeholder.png', // 本地public目录下的图片路径
        alt: 'test'
      }
    }
    
  • 拦截图片请求返回本地fixture图片
    先在cypress/fixtures文件夹中放入测试用的图片(比如test-hero-image.png),然后在测试中拦截CMS图片请求,返回本地fixture资源:

    it('validate heading', () => {
      // 匹配CMS图片的请求路径,返回本地fixture
      cy.intercept('GET', '**/assets/cms/**/*.png', { fixture: 'test-hero-image.png' }).as('heroImage');
      cy.mount(<Hero {...prop} />);
      cy.getByDataID(selectors.heading)
        .should('have.text', 'Heading for heading test')
        .and('be.visible');
      // 可选:验证请求被成功拦截
      cy.wait('@heroImage');
    });
    
  • 仅模拟图片请求成功状态(无需真实显示)
    如果只是想消除控制台404报错,不关心图片实际显示效果,可以直接拦截请求返回200状态:

    it('validate heading', () => {
      cy.intercept('GET', '**/assets/cms/**/*.png', { statusCode: 200 });
      cy.mount(<Hero {...prop} />);
      cy.getByDataID(selectors.heading)
        .should('have.text', 'Heading for heading test')
        .and('be.visible');
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 10:27:33