как издеваться или угонять конечную точку API стороннего URL-адреса, приводя к шутке при загрузке в обещание в качестве параметра - PullRequest
0 голосов
/ 27 ноября 2018

Я знаю, как имитировать запрос (https://jest -bot.github.io / jest / docs / tutorial-async.html ).Но это не то, что я хочу, так как я хочу, чтобы Jest мог смоделировать результат, полученный из определенной строки URL (например, www.abc.com).

В следующем примере я пытаюсь передатьтест Return default error when script resolved to api end point error для обещания, которое внедряет скрипт, который загружает контент из URL.

Воспроизвести

clone github.com:adamchenwei/reactjs-jest-playground.git
yarn install
yarn run test

Связанное содержимое файла

loadScriptAsync.js

export default function loadScriptAsync(
  scriptUrl,
  timeoutDuration,
  customLoadName = 'unnamed'
) {
  /* istanbul ignore next line: no need to test default 30s duration*/
  const FORCED_TIMEOUT_IN_MS = timeoutDuration || 30000;
  return new Promise(function(resolveCallback, rejectCallback) {
    let script = document.createElement('script');
    script.src = scriptUrl;
    script.type = 'text/javascript';
    script.onError = rejectCallback;
    script.async = true;
    script.onload = resolveCallback;
    script.addEventListener('error', rejectCallback, { once: true });
    script.addEventListener('load', resolveCallback, { once: true });
    document.head.appendChild(script);
    setTimeout(() => {
      rejectCallback({
        error: `${customLoadName} - load script async promise rejected by timeout`
      });
    }, FORCED_TIMEOUT_IN_MS);
  });
}

loadScriptAsync.test.js

import loadScriptAsync from './loadScriptAsync';

// const mockGetScript = () => new Promise(resolve => resolve(`var abc='1';`));

describe('loadScriptAsync', () => {
  it('return error when rejected or timedout after execution', async () => {
    expect.assertions(1);
    try {
      await loadScriptAsync('', 1, 'my custom');
    } catch (e) {
      expect(e).toEqual({
        error: 'my custom - load script async promise rejected by timeout'
      });
    }
  });
  it('return default error name when not set', async () => {
    expect.assertions(1);
    try {
      await loadScriptAsync('', 1);
    } catch (e) {
      expect(e).toEqual({
        error: 'unnamed - load script async promise rejected by timeout'
      });
    }
  });
  it('return default error when script resolved to api end point error', async () => {
    expect.assertions(1);
    try {
      await loadScriptAsync('www.abc.com', 1000);
    } catch (e) {
      expect(e).toEqual({
        error: '???'
      });
    }
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...