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

React Input组件单元测试:获取input值始终为undefined求助

我来帮你搞定这个测试问题~你遇到的value总是undefined的核心原因是:Enzyme返回的wrapper对象不是原生DOM元素,直接访问.value属性是行不通的,得用Enzyme提供的方法来获取正确的值。

问题分析

你现在直接写wrapper.find('input').value,但wrapper.find('input')返回的是Enzyme的ReactWrapper实例,不是浏览器里的原生<input>元素,所以这个属性根本不存在,自然返回undefined。

解决方案

根据你的Input组件是受控组件还是非受控组件,有两种正确的取值方式:

1. 如果是受控组件(通过value props控制值)

直接通过.props().value获取组件的props值:

// 获取值
console.log(wrapper.find('input').props().value);
// 断言
expect(wrapper.find('input').props().value).to.be.equal("myName");

2. 如果是非受控组件(通过defaultValue设置初始值)

需要先获取原生DOM元素,再访问value:

// 获取值
console.log(wrapper.find('input').getDOMNode().value);
// 或者用.instance()
console.log(wrapper.find('input').instance().value);
// 断言
expect(wrapper.find('input').getDOMNode().value).to.be.equal("myName");

修正后的完整代码

这里我帮你把代码里的小语法问题(比如缺分号)也一并修正了,你可以参考:

import React from 'react';
import chai, { expect } from 'chai';
import { mount } from 'enzyme';
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

configure({ adapter: new Adapter() });
import Input from './Input';

describe('Input Component', () => {
  let wrapper;

  beforeEach(() => {
    const props = {
      placeholder: "name",
      name: "name",
      value: "myName",
      change: () => {},
      classes: "input"
    };
    // 受控组件方式(推荐,大多数React表单组件都是受控的)
    wrapper = mount(<Input {...props} />);
    // 如果是非受控组件,换成下面这行
    // wrapper = mount(<Input defaultValue="myName" {...props} />);

    // 正确打印值
    console.log(wrapper.find('input').props().value); // 受控组件用这个
    // console.log(wrapper.find('input').getDOMNode().value); // 非受控组件用这个
  });

  it('Input value should be myName', () => {
    // 受控组件断言
    expect(wrapper.find('input').props().value).to.be.equal("myName");
    // 非受控组件断言
    // expect(wrapper.find('input').getDOMNode().value).to.be.equal("myName");
  });
});

另外还要确认你的Input组件确实正确传递了value或defaultValue到内部的原生<input>元素哦,如果组件内部没有把props传递下去,那上面的方法也拿不到值~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:40:45