Javascript 测试无状态私有函数
我的react组件是这样的,我使用getMenuItems方法呈现组件的一部分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
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]};`)