超时后反应测试状态更改

时间:2017-02-07 10:35:51

标签: reactjs settimeout

说我有一个卡片元素,点击时会翻转。 2秒后,它必须自动翻转。在CSS术语中,点击后,转换样式设置为 rotateY(180deg),2秒后它应该是com 初始

我想为这个反向翻转编写单元测试(目前测试通过,即使我希望变换道具等于初始值):

it( 'flips', () => {
        const testedCard = shallow( <Card /> )
        testedCard.setState( { faceUp: true } )

        setTimeout(
            () => {
                const cardFlipper = testedCard.node.props.children
                expect( cardFlipper.props.transform ).to.equal( 'initdasddaial' )
            },
            2500
        );
    } )

1 个答案:

答案 0 :(得分:1)

如果您使用mochajasmine,则可以在done中传递it回调:

it( 'flips', (done) => {
        const testedCard = shallow( <Card /> )
        testedCard.setState( { faceUp: true } )

        setTimeout(
            () => {
                const cardFlipper = testedCard.node.props.children
                expect( cardFlipper.props.transform ).to.equal( 'initdasddaial' )
                done();
            },
            2500
        );
    } )

但是,根据您的测试运行器(设置),{<1}}超时可能会在 2500 mills之前发生。您可能必须配置不同的超时值。

作为旁注,基于时间的单元测试通常不是一个好主意。考虑设计组件,以便您可以更确定地进行测试。