React+Jest测试出现No overload matches this call错误及组件方法访问问题
问题解决指南
1. 解决「No overload matches this call」报错
报错的核心原因是BuildingUnit组件声明了必填属性ab和cd,你在测试中渲染组件时没有传入这两个必填参数,触发了类型校验失败。
直接在渲染组件时传入符合XProperty类型要求的模拟值即可解决:
// 传入必填props,值可以根据你的业务逻辑自定义模拟值 const {getByText, getByLabelText}= render(<BuildingUnit ab="测试参数1" cd="测试参数2"/>);
2. 访问BuildingUnit的methodA方法完成断言
@testing-library/react 本身更推荐通过模拟用户交互验证组件行为,如果你确实需要直接调用内部方法验证逻辑,可以通过ref获取类组件的实例:
修改后的测试代码示例:
import BuildingUnit from './BuildingUnit'; import React, { createRef } from 'react'; import { render } from '@testing-library/react'; test('Validation', ()=>{ // 创建ref用于存储组件实例 const componentRef = createRef(); // 渲染时传入必填props和ref render(<BuildingUnit ab="模拟ab值" cd="模拟cd值" ref={componentRef}/>); // 从ref上拿到组件实例,直接调用methodA const instance = componentRef.current; instance.methodA(); // 这里补充你的断言逻辑,比如验证state变化、方法返回值、副作用等 // 示例:验证methodA执行后state的ef字段是否符合预期 expect(instance.state.ef).toBe('期望的结果'); })
原组件代码语法问题修复提示
你提供的BuildingUnit组件存在几处语法错误,会导致运行异常,建议先修复:
- 类型定义缺少属性类型声明,比如要改成
type XProperty= { ab: string, cd: string };的格式,给每个属性指定对应类型 - 方法名
Method B()包含空格,属于非法标识符,要改成无空格的合法命名比如methodB() render方法中的input标签未闭合,且属性错误,要改成<input type="text" onChange={this.methodA} />- onChange绑定的方法名大小写错误,你定义的是小写开头的
methodA,绑定时写的this.MethodA大小写不匹配会触发运行时报错 - 没有初始化state,类组件需要在constructor中初始化
YProperty对应的state属性,否则访问state会返回undefined
内容的提问来源于stack exchange,提问作者Raj Chanpura
相关产品推荐
相关产品推荐

