测试与笑话和酶反应的成分,覆盖问题

时间:2018-10-21 08:21:21

标签: reactjs jestjs enzyme

我有一个简单的组件(选择),它带有选项列表。在其中,我使用地图渲染列表。我使用玩笑和酶测试组件,然后制作快照。不幸的是,该报道抱怨其中的映射和功能会生成选项元素。

如何以正确的方式对其进行测试以使其覆盖率达到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();
  });
});

2 个答案:

答案 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:)