我有一个简单的组件(选择),它带有选项列表。在其中,我使用地图渲染列表。我使用玩笑和酶测试组件,然后制作快照。不幸的是,该报道抱怨其中的映射和功能会生成选项元素。
如何以正确的方式对其进行测试以使其覆盖率达到100%?
覆盖率:
-------------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
-------------------|----------|----------|----------|----------|-------------------|
BookList.js | 83.33 | 100 | 50 | 100 | |
BookListItem.js | 100 | 100 | 100 | 100 | |
BookList.js
import React from 'react';
import { shape, string, arrayOf } from 'prop-types';
import BookListItem from './BookListItem';
const renderBookItems = book => <BookListItem
key={book.id}
title={book.volumeInfo.title}
/>;
const BookList = ({ books }) => <div>{books.map(renderBookItems)}</div>;
BookList.displayName = 'BookList';
BookList.propTypes = {
books: arrayOf(shape({
volumeInfo: shape({
title: string,
}),
id: string,
})),
};
export default BookList;
BookList.test.js
import React from 'react';
import { shallow } from 'enzyme';
import BookList from './BookList';
describe('<BookList />', () => {
it('should match snapshot', () => {
const wrapper = shallow(<BookList books={[]} />);
expect(wrapper).toMatchSnapshot();
});
});
答案 0 :(得分:1)
浅酶不会渲染renderBookItems
。因此您的测试仅涵盖BookList
,并且您需要为renderBookItems
添加一些额外的测试。
答案 1 :(得分:0)
最后,我在酶库中发现了一个问题,向我展示了一条路径。
我对测试进行了一些更改,以考虑到BookListItem
import React from 'react';
import { shallow } from 'enzyme';
import BookList from './BookList';
import BookListItem from './BookListItem';
const bookList = [
{
id: '1234qwer',
volumeInfo: {
title: 'A Book'
}
},
{
id: '1235qwer',
volumeInfo: {
title: 'A Book 2'
}
}
];
describe('<BookList />', () => {
const wrapper = shallow(<BookList books={bookList} />);
it('matches a snapshot', () => {
expect(wrapper).toMatchSnapshot();
});
it('has 2 BookListItem elements', () => {
const items = wrapper.find(BookListItem);
expect(items.length).toEqual(2);
});
});
即使您在解决问题后也看了它,也感谢@ oliver.voron:)