【问题标题】:How to test functions inside functional components with React hooks?如何使用 React 钩子测试功能组件内部的功能?
【发布时间】:2021-04-13 23:39:26
【问题描述】:

我有一个使用 useState 钩子的功能组件,如下所示:

import React,{useState} from 'react';
    export const PList = (props) =>{
      const [obj, setObj]= useState({
        value: null,
       open: null
      });
      let onDeleteList = (data) =>{
        setObj({....});
      };
      return(
        <React.Fragment>
            { 
                props.arr.map((p,i)=>{
                    return <childA onDeleteList={onDeleteList} />
                })
            }
         </React.Fragment>
      );
    }

我正在使用 Jest+ 酶并希望编写一个测试用例来测试此组件中的 onDeleteList 函数。我试过下面的代码:

describe('PList',()=>{
   let wrapper = shallow(<Plist {...props}/>);
   it('should call onDeleteList',()=>{
      expect(wrapper.find('onDeleteList')).toBeTruthy();
   });
 });

我不确定这是否是正确的方法,覆盖率报告仍然显示 onDeleteList() 未包含在测试用例中。谁能告诉我如何为这种情况编写一个测试用例?

【问题讨论】:

标签: reactjs jestjs enzyme


【解决方案1】:

这就是你应该如何测试:

import childA here 

describe('PList',()=>{
   let wrapper = shallow(<Plist {...props}/>);
   it('should call onDeleteList',()=>{
      const onDeleteListHandler=wrapper.find(childA).at(0).prop("onDeleteList");
    onDeleteListhandler(pass your data here);
     expect(onDeleteListhandler).toHaveBeenCalledTimes(1);
    

   });
   
 });

【讨论】:

  • 谢谢你 Sakshi..!但是当我运行这段代码时,它在包装器上抛出了一个错误,在 'prop' 处查找语句说“方法 props 意味着在 1 个节点上运行。找到了 0。可能是因为 是从一个 arr.map()。对不起,我错过了,我现在更新了问题中的代码。您能否提供进一步的建议?
  • 在您的测试用例中,您为props 提供了什么价值?
  • 我正在传递一个包含一些静态数据的数组:arr= ["node1", "node2"]
  • 显示您在测试用例中拥有的完整道具结构
  • const props = { arr: ["node1",node2"] }
猜你喜欢
  • 2019-12-08
  • 2021-08-30
  • 2021-04-25
  • 1970-01-01
  • 2020-09-21
  • 2020-12-10
  • 2019-08-06
  • 1970-01-01
  • 2021-09-04
相关资源
最近更新 更多