React-Native 日历议程没有用于 Detox 的 testID

Posted

技术标签:

【中文标题】React-Native 日历议程没有用于 Detox 的 testID【英文标题】:React-NativeCalendar Agenda doesnt have testID for Detox 【发布时间】:2019-07-20 02:08:10 【问题描述】:

我正在为我的 react-native 项目使用 detox,它有一个使用 react-native-calendar 中的 Agenda 组件的日历组件。我希望为议程组件添加一个 testID,但似乎没有。 这是我的议程代码。

  <Agenda
    items=this.state.items
    onDayPress=(day)=>console.log('day pressed',day)
    onDayChange=(day)=>console.log('day changed')
    pastScrollRange=50
    futureScrollRange=50
    renderItem=(item, firstItemInDay) => return (<CalendarEvent EventID=item.EventID navigation =this.props.navigation/>);


    renderEmptyDate=() => return (<EmptyEvent/>);
    // specify what should be rendered instead of ActivityIndicator
    //renderEmptyData = () => return (<EmptyEvent/>)
    rowHasChanged=(r1, r2) => return r1.text !== r2.text
    // By default, agenda dates are marked if they have at least one item, but you can override this if needed
    markedDates=markedDates
    theme=
                    backgroundColor: '#203546',
                    calendarBackground: '#203546',
                    textSectionTitleColor: '#ffffff',
                    selectedDayBackgroundColor: '#203546',
                    selectedDayTextColor: '#ffffff',
                    todayTextColor: '#00adf5',
                    dayTextColor: '#ffffff',
                    textDisabledColor: '#ffffff',
                    dotColor: '#ffffff',
                    selectedDotColor: '#ffffff',
                    monthTextColor: '#ffffff',
                    textMonthFontWeight: 'bold',
                    textDayFontSize: 16,
                    textMonthFontSize: 20,
                    textDayHeaderFontSize: 15,
                    agendaDayTextColor: 'white',
                    agendaDayNumColor: 'white',
                    agendaTodayColor: '#00adf5',
                    agendaKnobColor: 'white'
                    />

【问题讨论】:

【参考方案1】:

react-native-calendars 存储库的快速search 表明,testID 属性仅在 CalendarHeader 组件中受支持。

该库提供的其余组件似乎不支持testID,但这并不意味着它们不能。

如果您查看 Detox troubleshooting guide 添加 testID 属性是状态:

解决方案:React Native 只支持原生上的 testID 属性 内置组件。如果您创建了自定义复合组件, 你必须自己支持这个道具。你应该可能 将 testID 道具传播给您渲染的孩子之一(内置 组件):

不幸的是,Agenda 组件不是您自己创建的,因此您无法对其道具进行太多控制。您可以采取一些措施:

    创建一个问题,并希望 repo 开发团队中的某个人做出您想要的更改。 分叉库。现在,您可以完全控制组件。您将能够添加所需的 testID 道具。然后,您可以使用库的分叉版本。这可能很有用,但请注意,您必须维护分叉的 repo。您始终可以将更改作为 PR 提交,它可能会合并到实际版本中。

最快的解决方案显然是选项 2。然后您可以在 package.json 中使用您的分叉版本,如下所示:

"react-native-calendars": "your_github_name/react-native-calendars"

【讨论】:

以上是关于React-Native 日历议程没有用于 Detox 的 testID的主要内容,如果未能解决你的问题,请参考以下文章

完整日历议程查看不显示周日活动

如何在我的完整日历议程中显示今天的日期

带有谷歌日历的完整日历

以日历季度为列分组

如何在 Emacs 启动时显示 Org 模式议程?

(my)SQL only 解决方案,用于显示议程系统中的可用时间段