Reactjs 如何在Jest单元测试中获得React道具的值?
我有这样一个组件:Reactjs 如何在Jest单元测试中获得React道具的值?,reactjs,jestjs,Reactjs,Jestjs,我有这样一个组件: export const TransactionReason = ({ changeReason, reason }) => { const handleNext = () => { if (!reason) changeReason({ value: defaultReason }); } return ( <View> <Picker test
export const TransactionReason = ({
changeReason,
reason
}) => {
const handleNext = () => {
if (!reason)
changeReason({
value: defaultReason
});
}
return (
<View>
<Picker
testID='reasonPicker'
selectedValue={reason?.code}
onValueChange={(value) => changeReason({
code: value,
value: value
})}
>
<Button
testID='reasonButton'
onPress={handleNext}
/>
</View>
);
所以这里我想检查reason
的新值
在其他测试中,我一直在使用以下工具测试道具:
expect(Picker.props.someProp).toEqual('Desired value);
但在这些情况下,someProp
在组件中是明确的:
<Picker someProp={'a value'} />
有什么提示吗?请给出一个,
TransactionReason
似乎没有使用changeReason
道具,并且不清楚您在测试中传递了什么。可能会传入一个jest.fn()
并查看是否使用{value:defaultReason}
调用它。在示例组件的第5行中,它正在使用changeReason
该属性是一个动作,一个函数。对于测试,我只想通过reason
值作为null
。在handleNext中
将被调用操作/函数,该操作/函数将更改值,但它实际上没有从道具中解构出来,因此您有一个错误。这就是为什么我要一个真实的,因为我不知道你发布的其他内容不具有代表性。@jonrsharpe在测试中编辑了问题,但它不会更新道具<可能已经调用了code>changeReason,但它只是一个双重测试,没有任何作用。不管怎样,TransactionReason
不负责在那之后发生什么,只是调用回调,所以测试一下。(通常,组件不负责传递哪些道具,因此直接测试这些值很少有价值。)
<Picker someProp={'a value'} />
expect(rendered.props.reason).toEqual('Desired value);