модульный тест с HTTP-запросом возвращает Promise {<pending>} - PullRequest
0 голосов
/ 06 февраля 2019

Я использую адаптер Axios Mock для проверки HTTP-запроса на проверку моей функции.После того, как я определил поведение для функции, а затем создал экземпляр класса для вызова функции, в результате получается

**Promise { <pending> }**, 

В чем проблема?как я могу вернуть значение, которое я определил?

Вот мой код:

UserService.js

export default class UserService {
  getUserInfo = userId => {
    const params = {
      userId,
    };

    return axios
      .get('https://www.usefortesting.com', {
        params: { userId: params },
      })
      .then(response => response.data.userInfo)
      .catch(error => error);
  };
}

UserService.test.js

import React from 'react';
import axios from 'axios';
import UserService from './UserService';
import MockAdapter from 'axios-mock-adapter';

describe('testing', () => {
  let axiosMock;
  const Info = {
    userInfo: {
      id: '123',
      name: 'omg',
    },
  };
  beforeEach(function() {
    axiosMock = new MockAdapter(axios);
  });

  afterEach(() => {
    axiosMock.reset();
    axiosMock.restore();
  });

  it('testing', () => {
    axiosMock
      .onGet('https://www.usefortesting.com', {
        params: { userId: 'user_1' },
      })
      .reply(200, Info);
    let userService = new UserService();
    let response = userService.getUserInfo('user_1');
    console.log(response);
  });
});

1 Ответ

0 голосов
/ 06 февраля 2019

Вам нужно дождаться ответа в вашем тесте.Используйте обратные вызовы или async / await, как показано ниже.
Ваш тест должен быть таким:

it('testing', async () => {  // notice async here
  axiosMock
    .onGet('https://www.usefortesting.com', {
      params: { userId: 'user_1' },
    })
    .reply(200, Info);
  let userService = new UserService();
  let response = await userService.getUserInfo('user_1');  // notice await here
  console.log(response);
});

ИЛИ

it('testing', () => {
  ...
  userService.getUserInfo('user_1').then(response => {
    console.log(response);
  });
});

Вы можете проверить эту ссылку на jest docs для большего количества примеров.

Также есть ошибка в вашем методе getUserInfo(), в параметрах вы передаете объект для userId, но вам нужно передать строку или int.Что вы должны сделать, это:

return axios.get('https://www.usefortesting.com', {
    params: { userId: params.userId },
})...

ИЛИ

return axios.get('https://www.usefortesting.com', {
    params,
})...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...