You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Jest+React测试组件的回调参数及getVoteText返回值?

测试CandidateList组件的两项内容
  • 点击按钮时,onClick={() => onConfirmVote(number)}中传递的参数是否正确;
  • getVoteText函数返回的值是否符合预期。

我的组件代码

function CandidateList({ data }: IProps) {
    const { convertToCurrency, convertToPercentage } = useNumberConversion();

    const getVoteText = useCallback(
        (total: number, percentage: number) => `${convertToCurrency(total)} (${convertToPercentage(percentage)})`,
        [convertToCurrency, convertToPercentage]
    );

    return (
        <ListGroup data-testid='candidate-list-component'>
            {data.map(({ onConfirmVote, avatar, number, votesConfirmed, hasVoted }) => (
                <ListGroup.Item key={`${number}`} as='li' className='d-flex flex-wrap gap-2 align-items-center'>
                    <div className='d-flex justify-content-between align-items-center w-100'>
                        <div className='d-flex flex-wrap align-items-center gap-2'>
                            <Avatar alt={`候选人 #${number}`} src={avatar} />
                            <h5 className='fw-bold mb-0'>#{number}</h5>
                        </div>

                        <div className='mt-1 d-flex flex-wrap align-items-center gap-2'>
                            <span className='mb-1'>票数:</span>

                            <Badge bg='primary' pill style={{ width: '155px' }} data-testid='badge-vote-value-component'>
                                {getVoteText(votesConfirmed.total, votesConfirmed.totalPercentage)}
                            </Badge>
                        </div>
                    </div>

                    <Button className='w-100' variant='success' onClick={() => onConfirmVote(number)} disabled={hasVoted}>
                        确认投票
                    </Button>
                </ListGroup.Item>
            ))}
        </ListGroup>
    );
}

我的测试代码

describe('[候选人列表] - 测试确认投票按钮组件', () => {
    test('点击确认投票按钮应正常工作!', () => {
        render(<CandidateList data={MOCKED_DATA} />);

        const confirmVoteButton = screen.getAllByRole('button');

        confirmVoteButton.forEach(button => {
            console.log(button);
            expect(fireEvent.click(button)).toBe(true);
        });
    });
});

内容的提问来源于stack exchange,提问作者THIAGO DE BONIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 06:45:32