Reputation: 3562
One of my test coverage is as below:
I see total 3 lines: 16, 27 and 38 under uncovered lines. I confirm that by looking at coverage/Icov-report/index.html
(WIP for improving unit test).
Would missing 3 lines of coverage cause branch coverage to be 0%? I would expect something rather than 0% but I am learning Jest so not sure.
service.ts
import { injectable } from 'inversify';
import { createLogger, format, Logger } from 'winston';
import DailyRotateFile from 'winston-daily-rotate-file';
import fs from 'fs';
const logDir = 'logs';
@injectable()
export default class LoggerService {
private readonly winstonLogger: Logger;
private static loggerService: LoggerService;
constructor() {
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir);
}
const dailyRotateFileTransport = new DailyRotateFile({
filename: `${logDir}/%DATE%-results.log`,
datePattern: 'YYYY-MM-DD',
});
this.winstonLogger = createLogger({
format: format.combine(
format.timestamp(),
format.printf((info) => `${info.timestamp} ${info.level}: ${JSON.stringify(info.message)}`),
),
transports: [
dailyRotateFileTransport,
],
exitOnError: false,
});
}
static get Instance() {
if (this.loggerService) {
return this.loggerService;
}
this.loggerService = new LoggerService();
return this.loggerService;
}
public get logger() {
return this.winstonLogger;
}
}
service.spec.ts
const logger = {
debug: jest.fn(),
log: jest.fn(),
};
// trying to mock createLogger to return a specific logger instance
jest.mock('winston', () => ({
format: {
combine: jest.fn(),
timestamp: jest.fn(),
printf: jest.fn(),
},
createLogger: jest.fn().mockReturnValue(logger),
transports: {
File: jest.fn(),
},
}));
import 'reflect-metadata';
import * as winston from 'winston';
import LoggerService from '../logger.service';
describe('loggerService', () => {
let loggerMock: winston.Logger;
afterAll(() => {
jest.resetModules();
jest.resetAllMocks();
});
it('logger function called', () => {
const mockCreateLogger = jest.spyOn(winston, 'createLogger');
const loggingService: LoggerService = LoggerService.Instance;
loggerMock = mockCreateLogger.mock.instances[0];
expect(loggingService).toBeInstanceOf(LoggerService);
expect(loggingService).toBeDefined();
expect(mockCreateLogger).toHaveBeenCalled();
logger.log('debug', 'test log debug');
expect(logger.log).toHaveBeenCalled();
loggingService.logger.debug('debug message');
expect(logger.debug).toHaveBeenCalledTimes(1);
});
});
Upvotes: 1
Views: 5192
Reputation: 22803
Looks like 0% means you missed testing all if
s that are definitely goes to the category Branch
.
Try to add tests for one of if
s and see if % Branch
will become something like 50%
Upvotes: 1