diff --git a/src/common.ts b/src/common.ts index a48524e..88589ca 100644 --- a/src/common.ts +++ b/src/common.ts @@ -35,6 +35,8 @@ export interface ConfigOptions { coverageDecreaseThreshold?: number; /* Fail coverage check if per-file coverage is lower than this for new files only */ newFileCoverageThreshold?: number; + /* Function to generate a custom output based on the diff */ + customFormatter?: (files: FilesResults, totals: FileResultFormat) => string; } export interface DiffCheckResults { diff --git a/src/index.test.ts b/src/index.test.ts index 08994e1..9c4a3d5 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -50,7 +50,8 @@ describe('diff', () => { checkCriteria: ['lines'], coverageThreshold: 100, coverageDecreaseThreshold: 0, - newFileCoverageThreshold: 1 + newFileCoverageThreshold: 1, + customFormatter: jest.fn() }; coverageDiff.diff(fileNotCovered, fileFullCovered, mockedOptions); @@ -63,6 +64,13 @@ describe('diff', () => { mockedOptions.coverageDecreaseThreshold, mockedOptions.newFileCoverageThreshold ); + expect(mockedOptions.customFormatter).toHaveBeenCalledWith( + 'mockedFiles', + { + deltas: 'mockedTotals', + pcts: 'mockedPcts' + } + ); }); }); }); diff --git a/src/index.ts b/src/index.ts index a89593e..4448553 100644 --- a/src/index.ts +++ b/src/index.ts @@ -21,7 +21,8 @@ export function diff( checkCriteria, coverageThreshold, coverageDecreaseThreshold, - newFileCoverageThreshold + newFileCoverageThreshold, + customFormatter } = options; const { regression, files, totals, diff, belowThreshold } = diffChecker( @@ -33,7 +34,8 @@ export function diff( newFileCoverageThreshold ); - const results = resultFormatter(files, totals); + const results = + customFormatter?.(files, totals) || resultFormatter(files, totals); return { diff,