Axios Call не высмеивают - PullRequest
0 голосов
/ 02 мая 2018

Компонент My React использует Axios для вызова API. В моем модульном тесте я пытаюсь смоделировать Axios с помощью заглушки Sandbox от Sinon, например:

sandbox1 = sandbox.create();
            const resolved = new Promise((r) => r([{ id: 1, name: 'PetA' }, { id: 2, name:'PetB' }]));
            sandbox1.stub(axios, 'get').returns(resolved);

Я хочу проверить приведенный ниже код

this.setState(
            ({ testing }) => ({
                testing: {
                    ...testing,
                    [testKey]: {
                        isExecuting: true,
                        response: null
                    }
                }
            }),
            () => {
                axios(req)
                    .then(r => {
                        this.setState(state => {
                            const cancelled =
                                state.testing &&
                                state.testing[testKey] &&
                                state.testing[testKey]['cancelled'];
                            return !cancelled
                                ? {
                                    test: {
                                        ...state.test,
                                        [testKey]: {
                                            isExecuting: false,
                                            cancelled: false,
                                            response: r
                                        }
                                    }
                                  }
                                : undefined;
                        });
                    })


this is followed by catch block 
and closed paranthesis of setState

Проблема в том, что когда я запускаю тест с заглушенными осями, как показано в начале, я всегда получаю следующее в качестве результирующего состояния в конце

{ testing: { 'get_/pets': { isExecuting: true, response: null } } }

Это означает, что аксиос не разрешает обещание, несмотря на инструкции, данные при его заглушении. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 02 мая 2018

В вашем тесте вы должны использовать функцию-заглушку, поэтому вместо вызова axios(req) вы должны вызывать axios.get(req), поскольку axios как функция не получает заглушку

...