Кажется, что шутка не может охватить ни одного оператора if. Это функция, которую я хочу протестировать:
...
load(): void {
glob.sync('**/*.docs.json').forEach((file) => {
const f = require(file);
if (f.tags) this.doc.tags = f.tags;
});
Я написал следующий тест:
import path from 'path';
import Sample from './sample';
const mockedJsonConfigFile = __dirname + '/test.json';
jest.mock('glob', () => {
return {
sync: () => [mockedJsonConfigFile],
};
});
describe('Sample test', () => {
let sample: Sample;
beforeAll(() => {
sample = new Sample();
});
it('Should load file correctly', () => {
const mockResolveFile = jest.spyOn(path, 'resolve');
sample.load();
let jsonFileCalled = false;
// check if the json file is called
mockResolveFile.mock.calls.forEach((c) => {
if (typeof c == 'object' && c.includes(mockedJsonConfigFile)) {
jsonFileCalled = true;
}
});
expect(jsonFileCalled).toBeTruthy();
expect(sample.doc.tags.length).toBe(2);
});
});
Он загружает файл фикстуры, содержащий объект из 2 тегов:
{
"tags": ["tag1", "tag2"]
}
Итак, когда я запускаю тест, он сообщает мне, что строка 15 (оператор if) не покрывается, но я не понимаю, почему, поскольку в моем тесте указано, что в массиве тегов должно быть 2 элемента.
Есть ли способ обхода этого?