Правильное использование моксиосов - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь имитировать запрос ax ios в функции с использованием mox ios. Тест работает нормально и дает ожидаемый результат, но я не думаю, что то, как я его реализовал, вообще не лучшая практика. Может ли кто-нибудь предложить мне лучший способ добиться этого вместо использования 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)
});

1 Ответ

0 голосов
/ 02 августа 2020

Думаю, это лучший выбор.

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 />);
...