1 回答
TA贡献1833条经验 获得超4个赞
如果你稍微重构一下,你可以看到哪一行没有被调用:
export const CardContainer = ({ index, icon, copy, click }) => (
<BlankCard variant="light" title={copy}>{icon}<p>{copy}</p>
{click && <a className="tile-learn-more" id={`tile-id-${index}`} onClick={() => {
click(index); // this one!
}}>Learn More</a>}
</BlankCard>
);
该行未被覆盖,因为从未实际调用回调。onClick
此外,仅仅测试任何函数是否绑定到它并不是很有用 - 绑定到一个no-op,比如,甚至绑定到错误的函数,仍然会通过。这也是在测试实现,而不是行为。onClick={() => {}}
相反,模拟点击并确保模拟被调用:
it('will do the right thing when the Learn More link is clicked', () => {
const mockOnClick = jest.fn();
const index = 1;
const props = { index, icon: 'icon', copy: 'foo', click: mockOnClick };
const wrapper = shallow(<CardContainer {...props} />);
wrapper.find('.tile-learn-more').simulate('click');
expect(mockOnClick).toHaveBeenCalledWith(index);
});
添加回答
举报
