В моем приложении 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
не может распознать вызов функции.
Что я делаю не так? Как мне получить тестовую работу?