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);