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

使用Enzyme测试React组件时出现‘Cannot read property 'have' of undefined’错误原因咨询

解决Enzyme测试中"Cannot read property 'have' of undefined"错误

这个报错的核心原因很明确:你混用了不同断言库的语法。

你当前代码里用的是Jest自带的expect方法,但to.have.length()是Chai断言库的链式写法——Jest本身并不支持这种to.have的调用结构,所以to对象下找不到have属性,就抛出了这个undefined错误。

下面给你两种可行的解决办法:

方法1:改用Jest原生断言语法

直接用Jest支持的断言方式,不需要额外安装依赖,修改测试代码如下:

describe("counter", () => {
  it("test truty", () => {
    const wrapper = shallow(<Counter />);
    // 写法一:使用Jest的toHaveLength断言
    expect(wrapper.find("p")).toHaveLength(1);
    // 写法二:直接断言元素的length属性
    expect(wrapper.find("p").length).toBe(1);
  });
});

方法2:配置Chai+chai-enzyme使用原语法

如果你更习惯Chai的to.have风格,可以安装对应的依赖并配置:

  1. 安装开发依赖:
npm install chai chai-enzyme --save-dev
  1. 在测试文件顶部引入并配置:
import React from "react";
import { shallow, mount } from "enzyme";
import Counter from "./Counter";
// 引入Chai和chai-enzyme
import chai from 'chai';
import chaiEnzyme from 'chai-enzyme';
// 启用chai-enzyme插件
chai.use(chaiEnzyme());
// 替换Jest的expect为Chai的expect
const expect = chai.expect;

describe("counter", () => {
  it("test truty", () => {
    const wrapper = shallow(<Counter />);
    // 现在可以正常使用to.have语法了
    expect(wrapper.find("p")).to.have.length(1);
  });
});

另外提醒一下,确保你的Enzyme版本和React版本是兼容的,比如React 16需要搭配Enzyme 3.x版本,避免出现其他隐性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:26:52