0

我正在尝试使用 moxios 在函数中模拟 axios 请求。测试运行良好并获得了预期的结果,但我认为他们实现它的方式根本不是最佳实践。有人可以建议我一种更好的方法来实现这一点,而不是setTimeout()在测试中使用吗?

....

componentDidMount() {
    this.fetchSomething();
}

fetchSomething = () => {
    Axios.get('https://someurl.com/api/1')
        .then((response) => {
            this.setState({ data: response.data.data });
        })
        .catch((error) => {
            this.setState(error);
        })
}
....

我写的测试:

beforeEach(() => {
    moxios.install();
});

afterEach(() => {
    moxios.uninstall();
})

it('should ', async (done) => {
    moxios.wait(() => {
        const request = moxios.requests.mostRecent();
        request.respondWith({
            status: 200,
            response: { data: 'hello' }
        })
    });
    const wrapper = shallow(<TestComponent />);

    setTimeout(() => {
        expect(wrapper.instance().state.data).toEqual('hello')
        done();
    }, 500)
});

4

1 回答 1

0

我认为这是一个更好的选择。

it('should ', (done) => {
 moxios.wait(() => {
     const request = moxios.requests.mostRecent();
     request.respondWith({
        status: 200,
        response: { data: 'hello'}
     }).then(() => {
        expect(wrapper.instance().state.data).toEqual('hello');
        done()
     })
 });
});
const wrapper = shallow(<TestComponent />);
于 2020-08-02T18:11:01.483 回答