微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 FlatList 中测试 onScroll 事件

如何解决在 FlatList 中测试 onScroll 事件

我一直在尝试使用这个非常简单的测试文件来测试 onScrollFlatList 事件:

测试文件

// @ts-nocheck
import React from 'react';
import { fireEvent,render } from '@testing-library/react-native';
import { MyComponent } from '../../../src/modules/MyComponent';

describe('MyComponent',() => {
  it('should not call if IS_IOS is false',async () => {
    const { debug,getByTestId } = render(<MyComponent/>);

    fireEvent(getByTestId('alpha'),'onScroll',{
      nativeEvent: {
        contentSize: { height: 600,width: 400 },contentOffset: { y: 150,x : 0 }
      }
    })

    debug();
  });
});

正在测试的组件:

import React from 'react';
import { FlatList,NativeScrollEvent,NativeSyntheticEvent,Text } from 'react-native';

interface Props {}

export const ChatRoomContainer = (props: Props) => {
  const handleScroll = (event: NativeSyntheticEvent<NativeScrollEvent>): void => {};

  return (
    <FlatList
      inverted
      onScroll={ handleScroll }
      data={ [{},{},{}] }
      renderItem={ ({ item,index }: { item: any; index: number }) => {
        return <Text>dsafds</Text>;
      } }
      testID={ 'alpha' }
    />
  );
};

如您所见,我的 handleScroll 方法中甚至没有任何代码,但我仍然收到此错误

TypeError: Cannot read property 'height' of undefined

   8 |     const { debug,getByTestId } = render(<ChatRoomContainer>asdasd</ChatRoomContainer>);
   9 | 
> 10 |     fireEvent(getByTestId('alpha'),{
     |     ^
  11 |       nativeEvent: {
  12 |         contentSize: { height: 600 },13 |         contentOffset: { y: 150 }

如何修复此错误并测试我的 handleSCroll

提前感谢您的时间!

解决方法

发生错误的原因是事件数据缺少设置设备尺寸的 layoutMeasurement 字段。此外,与该问题无关,我建议使用 fireEvent.scroll 来触发滚动操作。

fireEvent.scroll(getByTestId('alpha'),{
    nativeEvent: {
        contentSize: { height: 600,width: 400 },contentOffset: { y: 150,x: 0 },layoutMeasurement: { height: 100,width: 100 } // Dimensions of the device
    }
})

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。