Jest URL.createObjectURL не является функцией - PullRequest
0 голосов
/ 24 октября 2018

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

Но, к сожалению, я получаю эту ошибку:

URL.createObjectURL не является функцией

myфункция тестирования:

describe('download', () => {
    const documentIntial = { content: 'aaa' };
    it('msSaveOrOpenBlob should not have been called when navigao is undefined', () => {
      window.navigator.msSaveOrOpenBlob = null;
      download(documentIntial);
      expect(window.navigator.msSaveOrOpenBlob).toHaveBeenCalledTimes(0);
    });
  });

Функция, которую я хочу проверить:

export const download = document => {
  const blob = new Blob([base64ToArrayBuffer(document.content)], {
    type: 'application/pdf',
  });
  if (window.navigator && window.navigator.msSaveOrOpenBlob) {
    window.navigator.msSaveOrOpenBlob(blob);
    return;
  }

  const fileURL = URL.createObjectURL(blob);
  window.open(fileURL);
};

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Это будет так же просто, как настроить URL на Global in Jest.Что-то вроде

describe('download', () => {
  const documentIntial = { content: 'aaa' };
  global.URL.createObjectURL = jest.fn();
  it('msSaveOrOpenBlob should not have been called when navigao is undefined', () => {
    global.URL.createObjectURL = jest.fn(() => 'details');
window.navigator.msSaveOrOpenBlob = jest.fn(() => 'details');
download(documentIntial);
expect(window.navigator.msSaveOrOpenBlob).toHaveBeenCalledTimes(1);
  });
});

Это должно привести к тесту, который вы также можете использовать для проверки, был ли вызван global.URL.createObjectURL.В качестве дополнительного примечания: вы также можете столкнуться с подобной проблемой с window.open. Я бы посоветовал также посмеяться над этим, если это произойдет.

0 голосов
/ 18 июня 2019

Поскольку window.URL.createObjectURL (пока) недоступен в jest-dom, вам необходимо предоставить для него фиктивную реализацию.

Не забудьте сбросить импровизированную реализацию после каждого теста.

describe("your test suite", () => {
  window.URL.createObjectURL = jest.fn();

  afterEach(() => {
    window.URL.createObjectURL.mockReset();
  });

  it("your test case", () => {
    expect(true).toBeTruthy();
  });
});
0 голосов
/ 24 октября 2018

jsdom, реализация JavaScript WHATWG DOM, используемая jest, пока не реализует этот метод.

Вы можете найти открытый тикет об этой конкретной проблеме на их странице github , где некоторые обходные пути представлены в комментариях.Но если вам нужно, чтобы blobURL действительно работал, вам придется подождать, пока этот FR не будет решен.

Обходной путь, предложенный в комментариях к проблеме для jest:

function noOp () { }
if (typeof window.URL.createObjectURL === 'undefined') { 
  Object.defineProperty(window.URL, 'createObjectURL', { value: noOp})
}
...