gpt4 book ai didi

javascript - react / enzyme : How to test for subcomponent?

转载 作者:数据小太阳 更新时间:2023-10-29 05:24:47 25 4
gpt4 key购买 nike

这就是我的 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

现在我想使用 enzyme 对主要组件进行一些单元测试。这就是我的做法,但最后一次测试失败,因为未定义 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 类....

export class MessengerList extends Component {
/* ... */
}

然后在测试中做....

import React from 'react'
import { expect } from 'meteor/practicalmeteor:chai'
import { shallow } from 'enzyme'

import { Container, Loader } from 'semantic-ui-react'
import Messenger, { MessengerList } from '/imports/ui/components/messenger.jsx';

describe('<Messenger />', () => {
let wrapper;
const defaultProps = {
data: [],
articleId: '',
isLoading: true
}

beforeEach(() => {
// render the component once up here in this block. It runs before each test.
wrapper = shallow(<Messenger {...defaultProps} />);
});

it('should show <Loader /> while loading data', () => {
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

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

expect(wrapper.find(MessengerList).length).to.equal(1);
expect(wrapper.find(Loader).exists()).to.be.false
});
});

更新

理想情况下,您应该先说明正在修改 Prop ......

...
describe('and the data has loaded', () => {
beforeEach(() => {
defaultProps.isLoading = false;
});

it('should show <Container /> component', () => {
expect(wrapper.find(Container).length).to.equal(1)
expect(wrapper.find(Loader).exists()).to.be.false
});
});
...

关于javascript - react / enzyme : How to test for subcomponent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45598423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com