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

React Native Testing Library fireEvent.press无法触发TouchableHighlight onPress问题

问题修复方案

1. 修复组件语法错误和未定义变量

你提供的组件代码存在两个明确的语法/逻辑问题,会直接导致onPress事件绑定失效:

  • TouchableHighlight标签的属性末尾多了多余的右大括号:onPress={onButtonPress}} 这里的第二个}是多余的,会导致属性绑定异常,onPress事件无法正常挂载到组件上。
  • 代码中使用了未定义的detail变量:<Text style={Style.detail}>{detail}</Text>,如果运行时该变量不存在,会抛出运行时错误,中断组件初始化逻辑,导致onPress回调没有完成初始化。

2. 修复useCallback依赖错误

你当前给useCallback的依赖数组写死为[false],会导致onButtonPress永远是组件首次渲染时创建的版本,闭包捕获的person和setPerson都是初始值。即便后续筛选后列表更新、组件重新渲染传入新的person对象,回调函数也不会更新,会出现逻辑异常甚至回调失效的问题。
将依赖替换为实际用到的props即可:

const onButtonPress = useCallback(() => {
  console.log("========> onButtonPress");
  setPerson({...person, flagged: true});
}, [person, setPerson]);

3. 优化测试按压事件触发逻辑

React Native Testing Library的fireEvent.press在部分场景下无法完整模拟Touchable系列组件的按压交互,建议替换为更贴近真实用户行为的userEvent来触发按压:
首先引入依赖:

import userEvent from '@testing-library/user-event';

修改测试中的点击逻辑:

const user = userEvent.setup();
// 替换原有的fireEvent.press代码
await user.press(getByTestId(`flag-person-${bobSaget.uuid}`));

4. 可选验证项

如果修改后问题仍存在,可以在点击按钮前添加断言,确认按钮没有被设置为禁用状态:

expect(getByTestId(`flag-person-${bobSaget.uuid}`)).not.toBeDisabled();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 20:30:01