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

У меня есть метод-оболочка для fetchapi, который возвращает обещание. См. Пример кода ниже:

      const fetchWrapper = (url , opts) => {
  const fetchPromise = fetch(url, opts);
  const wrapper = new Promise((resolve, reject) => {
    fetchPromise
      .then((response) => {
        if (response.status === 400 && response.headers.get('Content-Type') === 'application/json') {
          response.json()
            .then((data) => {
              if (!data.success) {
                resolve(new Promise(() => {}));
              } else {
                resolve(response);
              }
            })
            .catch(() => resolve(response));
        } else {
          resolve(response);
        }
      },
      reject);
  });
return wrapper;

Итак, теперь у меня есть метод, в котором я вызываю этот метод fetchWrapper, как показано ниже:

       async loadData() {
    const response = await fetchWrapper('/sample-template.json');
    const json = await response.json();
    this.reportTypes = json.templates;
  }

Вопрос в том, что я хочу провести модульное тестирование этого метода loadData. Итак, я пытаюсь заглушить внутренний метод, используя приведенный ниже код модульного теста.

      const MOCK_JSON = {
    templates: [{"id": 1,"name": "Sample report 1"}, {"id": 2,"name": "Sample report 2"}]
};

const jsonOk = (body) => {
    const mockResponse = new window.Response(JSON.stringify(body), {
      status: 200,
      headers: {
        'Content-type': 'application/json',
      },
    });
    return Promise.resolve(mockResponse);
  };

describe('load data api', async () => {
    let stub;
    beforeEach(() => {
        stub = sinon.stub(fetchWrapper);
        stub.onCall(0).returns(jsonOk(MOCK_JSON));
        console.log(stub.calledOnce);
    });
    afterEach(() => { 
        stub.restore();
    });
 
   it('load all report types', async () => {
     const res = loadData();
   });
});

Пожалуйста, дайте мне знать, каким может быть решение для проведения модульного теста. Я пробовал несколько способов, но не нашел подходящего решения. Помощь.

0 ответов

Другие вопросы по тегам