Angular Юнитестес: шпион импортировал вызов функции, но не обнаружил - PullRequest
0 голосов
/ 17 марта 2020

В моем приложении angular у меня есть несколько TypeGuards, например:

typeguards.ts

export const isFile = (file: unknown): file is File => {
  console.log(111);
  if (!(file as File).type && !(file as File).name && !(file as File).size && !(file as 
  File).lastModified) return false;
  return true;
};

export const isFileArray = (input: unknown): input is File[] => {
  if (!Array.isArray(input)) return false;
  for (const file of input) {
    if (!isFile(file)) return false;
  }
  return true;
};

Теперь мне нужно проверить их поэтому в качестве основы тестирования мы используем jest:

typeguards.spe c .ts

import { isFileArray, isFile, isString } from './typeguards';

describe('typeguards', () => {
  const spyHelper = { isFileArray, isFile, isString };

  fit.each([
    {
      testValue: [{ type: 'abc', lastModified: 1234, name: 'abc', size: 1234} as File],
      result: true,
      spies: { fileSpy: { returnValues: [true], timesCalled: 1 } },
    },
   ])('should test isFileArray', (testCase) => {
     const fileSpy = spyOn(spyHelper, 'isFile').and.returnValues(testCase.spies.fileSpy.returnValues);
     const result = isFileArray(testCase.testValue);
     expect(result).toBe(testCase.result);
     expect(fileSpy).toHaveBeenCalledTimes(testCase.spies.fileSpy.timesCalled);
   });
 }

Я хочу проверить, что isFile TypeGuard вызывается и хочет контролировать свой вывод. К сожалению, я всегда получаю Expected number of calls: 1; Received number of calls: 0 при запуске теста.

Из-за славного console.log я точно знаю, что isFile вызывается. Я думаю из-за того, что внутри isFileArray isFile вызывается в глобальном контексте jest не может распознать вызов функции.

Что я делаю не так? Как мне получить тестовую работу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...