Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 测试无状态私有函数_Javascript_Reactjs - Fatal编程技术网

Javascript 测试无状态私有函数

Javascript 测试无状态私有函数,javascript,reactjs,Javascript,Reactjs,我的react组件是这样的,我使用getMenuItems方法呈现组件的一部分 const TransactionListFilter = (props) => { const getMenuItems = () => filterCriteriaItems.map((data) => <MenuItem value={data.valu} name={data.name} >{data.name}</MenuItem>, ); re

我的react组件是这样的,我使用getMenuItems方法呈现组件的一部分

const TransactionListFilter = (props) => {
  const getMenuItems = () => filterCriteriaItems.map((data) =>
    <MenuItem value={data.valu} name={data.name} >{data.name}</MenuItem>,
  );
  return (
        <Dropdown
          className="Transaction-List-Filter-container-dropdown"
          selectMode="single"
          defaultText="See All"
          onMenuItemClick={handleFilterChange}
        >
          <Menu>
            {
              getMenuItems()
            }
          </Menu>
        </Dropdown>
  );
};
const TransactionListFilter=(道具)=>{
const getMenuItems=()=>filterCriteriaItems.map((数据)=>
{data.name},
);
返回(
{
getMenuItems()
}
);
};

我如何测试方法getMenuItems有什么想法吗?

问题是您将方法
getMenuItems
隐藏为
TransactionListFilter
函数的内部工作。你确定要测试它吗?只要重构
TransactionListFilter
方法,测试就会中断。据我所知,您有两种选择:

重构到类:

class TransactionListFilter {
    getMenuItems(){
        return filterCriteriaItems.map((data) =>
            <MenuItem value={data.valu} name={data.name}>{data.name}</MenuItem>,
    );
    }
    render() {
        return (
            <Dropdown
        className="Transaction-List-Filter-container-dropdown"
        selectMode="single"
        defaultText="See All"
        onMenuItemClick={handleFilterChange}
            >
            <Menu>
            {
                this.getMenuItems()
    }
    </Menu>
        </Dropdown>
    );
    }
};

您这样做的方式是使
getMenuItems
函数与
TransactionListFilter
紧密耦合,因此您无法在不使用
TransactionListFilter
的情况下单独测试
getMenuItems
。考虑把这个函数从道具上去耦。
filterCriteriaItems
来自哪里?它看起来像一个全局数组。如果是这样的话,你可以为你的测试创建这个函数的副本,但我不鼓励这样做。你能在另一个函数中测试一个函数吗?这里也是。只需测试一个组件,我可以知道否决投票的原因吗?
const getMenuItems = new Function('', `${TransactionListFilter.toString().match(/\getMenuItems.*=.*=>(.*)\)/s)[1]};`)