react-native - 如何断言 React Native 测试库中的按钮被禁用?

标签 react-native jestjs react-native-testing-library

如何断言 React Native 测试库中的按钮被禁用?我会想象这样的事情:

expect(getByRole('button')).toBeDisabled()
但 RNTL 不提供 toBeDisabled断言。

最佳答案

由于 RN 性质,这是一个常见问题。我只是通过测试回调函数的实际效果来实现我的目标,而不仅仅是比较调用次数或类似的东西......

describe('<Button /> - ', () => {
  let state = false
  const onPressMock = jest.fn(() => {
    state = !state
  })
  const props: ButtonProps = {
    text: 'Submit',
    onPress: onPressMock
  }

  it('should become disabled', () => {
    // act: render container
    const { container } = render(<Button {...props} isDisabled />)

    // assert 1: check if button receives {isDisabled}
    expect(container.props.isDisabled).toEqual(true)
    
    // act2: fire callback
    fireEvent(container, 'onPress')
    
    // assert 2: "state" should remain as false.
    expect(state).toEqual(false)
  })
})

确保您的按钮看起来像:
const isBlockedInteraction: boolean = isLoading || isDisabled;

return (
  <TouchableOpacity
    onPress={!isBlockedInteraction && onPress}
    disabled={isBlockedInteraction}
    {...props}
  />
)

关于react-native - 如何断言 React Native 测试库中的按钮被禁用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64696340/

相关文章:

react-native - 如何获取React Native中Text组件的行数?

React-Native:电子邮件的主题行与使用 Share.share 的消息内容相同

javascript - React Native FlatList 为所有项目显示相同的值

javascript - React 测试库如何使用 waitFor

jestjs - 如何测试 react-native 方法?

javascript - 如何在 native react 中设置不可移动的 map 标记

javascript - Jest |模拟 JavaScript 创建并注入(inject)的样式表

javascript - 使用 Jest : Can I mock an ES6 class 对 JS 脚本进行单元测试

react-native - 使用 React Native 测试库和 Jest 测试 setTimeout

reactjs - 使用 Formik 和 Yup 作为验证模式时,React Native 测试失败