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

如何在React应用中使用Jest测试输入框value是否成功设置?

问题根因

你遇到的问题核心有3点:

  • 触发change事件后,你提前赋值的ele变量存储的是事件触发前的旧元素引用,enzyme不会自动更新该变量的内容
  • 断言逻辑错误:enzyme封装的组件实例没有直接的value属性,需要通过.props()方法获取组件绑定的value属性
  • 选择器仅用type筛选不够精准,容易匹配到其他同类型输入框
修复后的测试代码
describe('Test case for testing login',() =>{
  let wrapper;
  test('username check',()=>
  {
    wrapper = shallow(<Login/>);
    // 用name属性精准匹配用户名输入框
    wrapper.find("FormControl[name='username']")
      .simulate("change", {target: { name:'username',value: 'UserFirst'}});
    // 事件触发后重新查找元素,读取props里的value做断言
    const updatedEle = wrapper.find("FormControl[name='username']");
    expect(updatedEle.props().value).toBe('UserFirst')
  })
})
补充兼容方案

如果修改后仍不生效,可添加强制更新逻辑适配旧版本enzyme:

const ele = wrapper.find("FormControl[name='username']");
ele.simulate("change", {target: { name:'username',value: 'UserFirst'}});
wrapper.update(); // 强制更新wrapper实例状态
const updatedEle = wrapper.find("FormControl[name='username']");
expect(updatedEle.props().value).toBe('UserFirst')

同时可自行检查Login组件内setName是否为useState返回的正确更新函数,无拼写或逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:27:03