使用 Jest/Enzyme 在 React 功能组件中测试封闭组件

Posted

技术标签:

【中文标题】使用 Jest/Enzyme 在 React 功能组件中测试封闭组件【英文标题】:Test enclosing component inside a React functional component using Jest/Enzyme 【发布时间】:2020-11-02 19:51:10 【问题描述】:

我有一个名为Post 的组件,其中有一个名为Div 的封闭组件。运行测试覆盖率时,Div 部分似乎没有被覆盖。然而,Post 被覆盖了。我怎样才能覆盖Div 部分。有人可以帮忙吗?

const Post = (id, title) => (
 <Div>
  <Title name=title />
 </Div>
);

这是我的测试用例

describe('Post component', () => 
  const props = 
    id: '1',
    title: 'Test',
  ;
  it('renders post', () => 
    const component = shallow(<Post ...props />);
    expect(component).toMatchSnapshot();
  );
);

【问题讨论】:

DivTitle 是什么?需要浅渲染吗? 这些是styled 组件,只是添加了填充和边距。 【参考方案1】:

根据您的评论,您似乎拥有名为 DivTitle 的样式化组件。如果你有它的函数的导出语句,你可以在这里通过发送它们的道具来调用它们,比如你如何对组件进行浅层测试。 如果你有类似的东西

export const Div = () => 

export const Title = () => 

export const Post = () => 

你的测试用例应该是

describe('Post component', () => 
  const props = 
    id: '1',
    title: 'Test',
  ;
  it('renders post', () => 
    const component = shallow(<Post ...props />);
    expect(component).toMatchSnapshot();
  );

 it('renders Div', () => 
    const component = shallow(<Div ...props />);
    expect(component).toMatchSnapshot();
  );

 it('renders Title', () => 
    const component = shallow(<Title ...props />);
    expect(component).toMatchSnapshot();
  );
);

这样,您将覆盖整个功能组件。

【讨论】:

以上是关于使用 Jest/Enzyme 在 React 功能组件中测试封闭组件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Jest/Enzyme 在功能性 React 组件中测试 lambda 函数?

如何使用 JEST、Enzyme 在 React 中测试自定义钩子?

Jest/Enzyme 单元测试:如何将存储传递给使用 redux 4 和 react-redux 6 连接功能的浅层组件

React / Enzyme:运行 Jest / Enzyme 测试时出现 Invariant Violation 错误

在使用 Jest/Enzyme 进行测试期间检测 React 中的合成点击

如何使用 Jest/Enzyme 在 React 中测试文件类型输入的更改处理程序?