【发布时间】:2021-04-07 17:55:11
【问题描述】:
我正在尝试为材质 UI 多选编写单元测试用例。
父组件代码是-
import {myData} from '../constant';
export const Parent = () => {
const onChangeStatus= (selectedValues: Array<string>) => {
setTest({
...test,
values: selectedValues
});
}
return (
<Child
onChange={onChangeStatus}
myData={test}
/>
);
}
子组件代码是 -
import React from 'react'
export interface ChildProps {
onChangeStatus: (values: Array<string>) => void;
myData?: Array<Test<string, string>> | null;
}
export const Child = ({onChangeStatus , myData}: ChildProps) => {
return (
<div>
<MultiSelect
multiple
native
value={myData.val}
onChange={(event: React.ChangeEvent<HTMLSelectElement>): void => {
const { selectedOptions } = event.target;
let values: string[] = Array.from(selectedOptions).map(selectedOption => selectedOption.value);
onChangeStatus(values);
}}>
{myData &&
myData.multiSelectData &&
myData.multiSelectData.map(
(item: Test<string, string>) => (
<option key={item.key} value={item.value}>
{item.key.replace('_',' ')}
</option>
)
)}
</MultiSelect>
</div>
);
}
这是我写的测试用例-
it('should call onChange handler when test multi select is selected', () => {
const event = {target: { value: 'All', key: 'All' }};
wrapper
.find(MultiSelect)
.first()
.props()
.onChange('test', event);
expect(mockOnChange).toHaveBeenCalled();
});
这个测试用例失败了。出现错误,例如 - TypeError: Cannot read property 'selectedOptions' of undefined。此功能的代码也不包括在内。
谁能帮助我通过测试用例并获得 100% 的多选代码覆盖率。
【问题讨论】:
标签: reactjs typescript jestjs material-ui enzyme