метод jasmine spyon readAsBinaryString свойства FileReader - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть функция, которая использует FileReader. Я хотел бы шпионить за методом readAsBinaryString .

В моем компоненте у меня есть следующее свойство reader: FileReader; Кроме того, внутри метода вставки у меня есть следующее утверждение:

this.reader.readAsBinaryString(file);

Вот код внутри моего spec-файла:

  fit('', () => {
    const e: any = {
        ...
      }
    };
    const readerSpy = spyOn(catalog.reader, 'readAsBinaryString');
    catalog.insert(e);
    expect(readerSpy).toHaveBeenCalled();
  });

Я получаю следующую ошибку:

Ошибка:: не удалось найти объект, на который можно было бы шпионить readAsBinaryString ()

1 Ответ

0 голосов
/ 04 сентября 2018

Вы можете издеваться над глобальными FileReader, как это:

    const mockReader: FileReader = jasmine.createSpyObj('FileReader', ['readAsBinaryString']);
    spyOn(window as any, 'FileReader').and.returnValue(mockReader);

И тогда в вашем модульном тесте это должно работать как положено:

  it('test', () => {
    ...
    catalog.insert(someMockData);
    expect(catalog.reader.readAsBinaryString).toHaveBeenCalled();
  });

Проверьте это демонстрация stackblitz

Редактировать

Если вы вызываете new FileReader() в методе вставки (в начале), чтобы вы могли смоделировать FileReader внутри it (или внутри beforeEach метода, если у вас есть несколько похожих модульных тестов):

  it('test', () => {
    const mockReader: FileReader = jasmine.createSpyObj('FileReader', ['readAsBinaryString']);
    spyOn(window as any, 'FileReader').and.returnValue(mockReader);
    // other mocks

    catalog.insert(someMockData);

    expect(catalog.reader.readAsBinaryString).toHaveBeenCalled();
    // other expects
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...