【发布时间】:2018-01-17 19:12:45
【问题描述】:
这就是我的 Messenger 组件的样子。如您所见,有主组件和列表组件。主要组件默认导出。 有了这个,一切都在我的应用程序中按预期工作。
/imports/ui/components/messenger.jsx
import React, { Component } from 'react'
import PropTypes from 'prop-types'
import { Container, Segment, Loader, Header } from 'semantic-ui-react'
class Messenger extends Component {
static get propTypes () {
return {
data: PropTypes.array,
articleId: PropTypes.string,
isLoading: PropTypes.bool
}
}
render () {
const { data, articleId, isLoading } = this.props
if (isLoading) { return (<Loader active inverted size='massive' className='animated fadeIn' />) }
if (articleId) { return (<MessengerList data={data} articleId={articleId} />) }
return (
<Container>
<Segment id='' className='m-b-1'>
<Header as='h1'>Title</Header>
<MessengerList data={data} />
</Segment>
</Container>
)
}
}
class MessengerList extends Component {
/* ... */
}
export default Messenger
现在我想使用酶对主要成分进行一些单元测试。我就是这样做的,但是最后一个测试失败了,因为MessengerList 没有定义。那么这应该怎么做呢。
import React from 'react'
import { expect } from 'meteor/practicalmeteor:chai'
import { shallow } from 'enzyme'
import { Container, Loader } from 'semantic-ui-react'
import Messenger from '/imports/ui/components/messenger.jsx'
describe('<Messenger />', () => {
const defaultProps = {
data: [],
articleId: '',
isLoading: true
}
it('should show <Loader /> while loading data', () => {
const wrapper = shallow(<Messenger {...defaultProps} />);
expect(wrapper.exists()).to.be.true
expect(wrapper.find(Loader).length).to.equal(1)
})
it('should show <Container /> data has been loaded', () => {
defaultProps.isLoading = false
const wrapper = shallow(<Messenger {...defaultProps} />);
expect(wrapper.find(Container).length).to.equal(1)
expect(wrapper.find(Loader).exists()).to.be.false
})
it('should show <MessengerList /> if articleID is given', () => {
defaultProps.articleID = 'dummy'
defaultProps.isLoading = false
const wrapper = shallow(<Messenger {...defaultProps} />);
expect(wrapper.find(MessengerList).length).to.equal(1)
expect(wrapper.find(Loader).exists()).to.be.false
})
})
我不想改变export default Messenger
【问题讨论】:
-
您必须在测试中导入
MessengerList组件。import MessengerList from '../components/MessengerList.jsx;然后expect(wrapper.find(MessengerList).length).to.equal(1); -
我无法导入它,因为它没有在 jsx 文件中导出。仅导出主要组件(默认)
-
两个组件都在同一个文件中?
-
是的,两个组件都在同一个文件中。与发布的完全相同。
-
您是在测试
<Communicator/>还是<Messenger />?因为在测试文件中你是浅渲染.
标签: javascript reactjs unit-testing enzyme