Jest.js 如何在单元测试(React JS)中Assert状态,同时在Axios调用中更新状态?

62o28rlo  于 8个月前  发布在  Jest
关注(0)|答案(1)|浏览(108)

嗨,我在单元测试用例中Assert状态时遇到问题,而它在axios调用中更新。这是我的axios调用

import axios from 'axios'
getData = () => {
    axios.get('/events/sept/week2/1097338')
        .then(res =>{
            if(res.status == 200){
                let resposne = res.data.resposne
                this.setState({weekData:response})
            }
        })
        .catch(error => {console.log(error)})
}

字符串
这是我的测试案例

test("test axios for week data",() => {
    const mock = new MockAdapter (axios)
    mock.onGet('/events/sept/week2/1097338').reply(200,{response:['raspberry']})
    const wrapper = shallow(<Component/>)
    wrapper.instance().getData()
    expect(wrapper.state('weekData')).toBe(['raspberry'])
})


当我调用wrapper.instance().getData()时,状态weekData正在组件中更新,我已经检查过了。它在wrapper中没有更新,我的Assert失败了,比如:expected:'raspberry '],received:[ ]。如何在wrapper中更新状态我已经尝试过setError,但没有使用

vmjh9lq9

vmjh9lq91#

当一个调用Axios的函数不可访问时,它返回的promise应该被链接以避免竞争条件。由于MockAdapter没有专门提供它,因此应该额外完成:

const wrapper = shallow(<Component/>)
jest.spyOn(axios, 'get');
wrapper.instance().getData()
expect(axios.get).toBeCalledTimes(1);
await axios.get.mock.results[0].value;
expect(wrapper.state('weekData')).toBe(['raspberry'])

字符串
对于可直接访问的函数,它返回的promise可以被链接。getData是一个反模式,因为它包含了不能被链接的松散promise。它应该是:

getData = () => {
    return axios.get('/events/sept/week2/1097338')
    ...


那么它可以被测试为:

const wrapper = shallow(<Component/>)
await wrapper.instance().getData()
expect(wrapper.state('weekData')).toBe(['raspberry'])

相关问题