как смоделировать несколько вызовов выборки, выполняемых в одной и той же функции - PullRequest
1 голос
/ 26 сентября 2019

У меня есть функция, как показано ниже, которая выполняет 2 вызова извлечения внутри одной и той же функции.

getNames() {
    var qs = require("qs");
    fetch(<URL>,
      {
        method: 'POST',
        headers: {
          'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
        },
        body: qs.stringify({
          firstName: this.state.firstName,
          lastName: this.state.lastName
        })
      })
      .then(response => response.json()).then((data) => {
        console.log(data)
      });

    var url = new URL(<someURL>)

    fetch(<someURL>).then(response => response.json()).then((data) => {
     ...do something...
      }
     })
      .catch(error => {
        alert("no response");

        console.log(error);
      });
  }

Я проверяю это с помощью Jest и Enzyme on React.Вышесказанное относится к компоненту GetName.Ниже приведен мой тестовый пример:

describe('getName', () => {
    const wrapper = shallow(<GetName />).instance();

    beforeEach(() => {
        global.fetch.resetMocks();
    });

    it('positive flow', () => {
        global.fetch.mockResolvedValue(
            new Response(JSON.stringify({data: "mockData"}))
        );
        const state = {
            firstName: "don",
            lastName: "Lee"
        };
        wrapper.setState(state);
        const actualValue = wrapper.getNames();
        expect(actualValue).toBeUndefined();
    });
 });

Как только я это сделаю, я получаю ошибку, что TypeError: body used already for: undefined

Я понимаю, что выборка здесь используется для вызова POST, но какя могу убедиться, что могу смоделировать оба вызова выборки внутри функции?

Я также пробовал fetch.mockResponse и fetch.mockResponses, а также fetch.mockResponseOnce.Ни один из них, кажется, не помогает мне издеваться над ними несколько раз, и я получаю эту ошибку со всеми упомянутыми функциями.

Есть ли какой-нибудь другой способ смоделировать оба вызова выборки?

1 Ответ

0 голосов
/ 27 сентября 2019

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

global.fetch = jest.fn().mockImplementation(() => {
  return Promise.resolve(new Response(JSON.stringify({ data: "mockData" }))); 
});

Похоже, что ошибка, которую вы получаете от функции выборки, заменяет всю реализацию фиктивной, которую следует устранить.ваша проблема.Теперь ваш тест будет выглядеть примерно так:

it('positive flow', () => {
  global.fetch = jest.fn().mockImplementation(() => {
    return Promise.resolve(new Response(JSON.stringify({ data: "mockData" }))); 
  });
  const state = {
      firstName: "don",
      lastName: "Lee"
  };
  wrapper.setState(state);
  const actualValue = wrapper.getNames();
  expect(actualValue).toBeUndefined();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...