React:测试一个作为道具传递并由父级触发的函数

时间:2018-03-08 15:53:56

标签: javascript reactjs sinon jest

我试图为我的测试触发点击事件。就这样:

describe('Button', function() {
      test('is clicked when player two is pending', (props ={}) => {
        const mockRandomAdv = sinon.spy();

         const tree = shallow(
            <FightButton  
                        button="Random adversary"
                        isPlayerTwoPending={true}
                        isPlayerOnePending={false}
                        onClick={mockRandomAdv}

             />
        );

       tree.find('Button').simulate('click');
       //expect(mockRandomAdv.calledOnce).toEqual(true);

        console.log(tree.props().children.onClick)
        //.not.toBe('fight-button random');
    });
});

第一个期望返回false,因此不会触发点击。 当我在console.log()时,它返回的click事件未定义。 这是我的孩子(这不是最后一个孩子)。

<Button
        onClick={ () => { this.props.randomAdversary }}
        class="fight-button random"
        button="Random adversary"
 />

以下是调用该孩子并描述该方法的父母:

class Board extends Component {

constructor(props) {
..my constructor
}

randomAdversary() { 
...my function 
}
    return (<div> <FightButton
                            isPlayerTwoPending={this.state.adversaryPending}
                            isPlayerOnePending={this.state.characterPending}
                            isPlayerOneTheWinner={this.state.heroWin}
                            isFighting={this.state.fighting}
                            randomAdversary={this.randomAdversary}
                            fight={this.fight(100)}
                            playAgain={this.playAgain()}
                          />
            </div>
    )
}

当我点击时,我的按钮类必须改变。但是当我在console.log这个类时,它没有变化。我的测试有问题吗?

1 个答案:

答案 0 :(得分:0)

查看按钮,我看不到正确调用该功能。我实际上什么都不做,你需要执行这样的功能:

<Button
    onClick={ () => { this.props.randomAdversary() }} // Add the `()`
    class="fight-button random"
    button="Random adversary"
/>