我正在使用Jest和Enzyme为以下容器组件编写单元测试:
import PropTypes from 'prop-types'
import React from 'react'
import { Route } from 'react-router-dom'
import { Tab } from 'Desktop/components/common'
import { ROUTES } from 'Desktop/constants'
export default class TabContainer extends React.Component {
static defaultProps = {
routeExact: false,
}
static propTypes = {
routeExact: PropTypes.bool,
routePath: PropTypes.oneOf(Object.values(ROUTES)).isRequired,
}
render() {
const { routeExact, routePath, ...props } = this.props
return (
<Route exact={routeExact} path={routePath} children={({ match }) => (
<Tab {...props} active={match ? true : false} route={routePath} />
)} />
)
}
}
我正在为Tab
编写测试,但问题是我在使用Enzyme遍历DOM来获取它时遇到了麻烦。在普通组件中,您可以使用.find('Tab')
获取它。
但在这种情况下,它不起作用,因为Route
的children
prop是一个返回组件(而不仅仅是组件)的函数。这意味着Enzyme无法遍历DOM树以找到Tab
。
如何在这种情况下获取Tab
?
问题是我使用的是Enzyme's shallow rendering API。使用.find('Tab')
可以正常使用full rendering API,因为它可以评估Route
的children
道具(因此可以找到Tab
)。