在调用异步方法后测试状态更改

时间:2018-06-08 12:15:59

标签: reactjs mocha enzyme nock chai-enzyme

我有一个React组件,它可以执行以下操作:

组件

class CallBackend extends React.Component{
    constructor(){
        super();
        this.state = {
            message:"",
            loading:true
        };
    }

    callService = ()=>{
        axios.get("http://localhost:80/sample-url")
             .then(response=>this.setState({loading:false, message:response.data}))
             .catch(error=>this.setState({loading:false, message:error.message}));
    };

    render(){
        return(<p>{this.state.loading}</p>);
    }
}

然后,我想用 mocha chai 测试我调用callService方法后状态发生了变化:

单元测试

it("should change the state value after calling the service",()=>{
    const clock = sinon.useFaketimers();
    nock("http://localhost:80").get("/sample-url").reply(200,"ok");
    const wrapper = shallow(<CallBackend/>);
    expect(wrapper.state().loading).to.equal(true);
    wrapper.instance().callService();
    clock.tick(500);
    wrapper.update();
    expect(wrapper.state().loading).to.equal(false);
});

我已尝试使用wrapper.update()sinon.fakeTimer()或甚至将callService称为承诺

wrapper.instance().callService().then(()=>{
    expect(wrapper.state().loading).to.equal(false);
});

没有结果:wrapper.instance().callService().then() is not defined

还有其他建议吗?我真的不想最终使用setTimeout()函数

0 个答案:

没有答案