From b2405071e70a606e77aa26105d13ebeb1bf93127 Mon Sep 17 00:00:00 2001 From: Richard Willis Date: Thu, 17 Aug 2017 22:11:13 +0200 Subject: [PATCH] Add additional reporter tests. Refs #10 --- .eslintignore | 3 ++- src/Reporter.js | 2 +- src/chromyRunner.js | 1 + src/chromyRunner.test.js | 54 +++++++++++++++++++++++++++++----------- src/compareImage.test.js | 45 +++++++++++++++++++++++++++++++++ 5 files changed, 88 insertions(+), 17 deletions(-) diff --git a/.eslintignore b/.eslintignore index 602d431..fe1556f 100644 --- a/.eslintignore +++ b/.eslintignore @@ -5,4 +5,5 @@ docs/ .vscode/ dist/ differencify_report/ -screenshots/ \ No newline at end of file +screenshots/ +coverage/ diff --git a/src/Reporter.js b/src/Reporter.js index d63b88f..c3617a6 100644 --- a/src/Reporter.js +++ b/src/Reporter.js @@ -27,7 +27,7 @@ class Reporter { addResult(outcome, fileName, message, diff) { this.results.push({ outcome, - fileName: path.basename(fileName), + fileName: fileName ? path.basename(fileName) : null, message, diff: diff ? path.basename(diff) : null, }); diff --git a/src/chromyRunner.js b/src/chromyRunner.js index 4b5ae0c..5ad9c37 100644 --- a/src/chromyRunner.js +++ b/src/chromyRunner.js @@ -67,6 +67,7 @@ const run = async (chromy, options, test, reporter) => { const result = await compareImage(options, test.name, reporter); prefixedLogger.log(result); } catch (error) { + reporter.addResult(false, `${test.name}.png`, error.message || ''); prefixedLogger.error(error); return false; } diff --git a/src/chromyRunner.test.js b/src/chromyRunner.test.js index ac56cda..6dc9369 100644 --- a/src/chromyRunner.test.js +++ b/src/chromyRunner.test.js @@ -6,6 +6,7 @@ import { globalConfig, testConfig, configTypes } from './defaultConfig'; import actions from './actions'; import functionToString from './helpers/functionToString'; import freezeImage from './freezeImage'; +import Reporter from './Reporter'; jest.mock('chromy', () => () => ({ @@ -29,6 +30,10 @@ jest.mock('./compareImage', () => jest.fn(arg => jest.mock('./helpers/functionToString'); +jest.mock('./Reporter', () => () => ({ + addResult: jest.fn(), +})); + let loggerCalls = []; logger.prefix = () => logger; logger.log = (...args) => { @@ -40,9 +45,15 @@ fs.writeFileSync = (...args) => { writeFileSyncCalls.push(...args); }; +let mockReporter; + const chromy = new Chromy(); describe('ChromyRunner', () => { + beforeEach(() => { + mockReporter = new Reporter(); + }); + afterEach(() => { loggerCalls = []; writeFileSyncCalls = []; @@ -55,7 +66,7 @@ describe('ChromyRunner', () => { }); it('run update', async () => { testConfig.type = configTypes.update; - const result = await run(chromy, globalConfig, testConfig); + const result = await run(chromy, globalConfig, testConfig, mockReporter); expect(result).toEqual(true); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); expect(chromy.screenshotDocument).toHaveBeenCalledTimes(1); @@ -66,7 +77,7 @@ describe('ChromyRunner', () => { }); it('run test', async () => { testConfig.type = configTypes.test; - const result = await run(chromy, globalConfig, testConfig); + const result = await run(chromy, globalConfig, testConfig, mockReporter); expect(result).toEqual(true); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); expect(chromy.screenshotDocument).toHaveBeenCalledTimes(1); @@ -75,11 +86,24 @@ describe('ChromyRunner', () => { expect(loggerCalls[2]).toEqual('screenshot saved in -> ./differencify_report/default.png'); expect(writeFileSyncCalls).toEqual(['./differencify_report/default.png', 'png file']); }); + it('run test fail', async () => { + // eslint-disable-next-line prefer-object-spread/prefer-object-spread + const failTestConfig = Object.assign({}, testConfig); + failTestConfig.steps = [{ + name: 'test', + }]; + // eslint-disable-next-line prefer-object-spread/prefer-object-spread + const failGlobalConfig = Object.assign({}, testConfig); + failGlobalConfig.screenshots = null; + const result = await run(chromy, failGlobalConfig, failTestConfig, mockReporter); + expect(result).toEqual(false); + expect(mockReporter.addResult).toHaveBeenCalledWith(false, 'default.png', ''); + }); describe('Chromy runner', () => { it('Step runner: test action', async () => { testConfig.type = configTypes.test; testConfig.steps.push({ name: actions.test, value: globalConfig.testReportPath }); - const result = await run(chromy, globalConfig, testConfig); + const result = await run(chromy, globalConfig, testConfig, mockReporter); testConfig.steps.pop({ name: actions.test, value: globalConfig.testReportPath }); expect(result).toEqual(true); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); @@ -91,7 +115,7 @@ describe('ChromyRunner', () => { }); it('Step runner: update action', async () => { testConfig.type = configTypes.update; - const result = await run(chromy, globalConfig, testConfig); + const result = await run(chromy, globalConfig, testConfig, mockReporter); expect(result).toEqual(true); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); expect(chromy.screenshotDocument).toHaveBeenCalledTimes(1); @@ -115,7 +139,7 @@ describe('ChromyRunner', () => { ], }; newConfig.type = configTypes.test; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(true); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); expect(chromy.screenshot).toHaveBeenCalledTimes(1); @@ -137,7 +161,7 @@ describe('ChromyRunner', () => { ], }; newConfig.type = configTypes.test; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(true); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); expect(chromy.screenshotDocument).toHaveBeenCalledTimes(1); @@ -159,7 +183,7 @@ describe('ChromyRunner', () => { ], }; newConfig.type = configTypes.test; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(true); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); expect(chromy.screenshotSelector).toHaveBeenCalledTimes(1); @@ -183,7 +207,7 @@ describe('ChromyRunner', () => { ], }; newConfig.type = configTypes.test; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(true); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); expect(chromy.wait).toHaveBeenCalledWith(10); @@ -203,7 +227,7 @@ describe('ChromyRunner', () => { ], }; newConfig.type = configTypes.test; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(true); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); expect(chromy.wait).toHaveBeenCalledWith('selector name'); @@ -223,7 +247,7 @@ describe('ChromyRunner', () => { ], }; newConfig.type = configTypes.test; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(true); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); expect(chromy.wait).toHaveBeenCalledTimes(1); @@ -243,7 +267,7 @@ describe('ChromyRunner', () => { ], }; newConfig.type = configTypes.test; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(false); expect(chromy.goto).toHaveBeenCalledWith('www.example.com'); expect(chromy.wait).toHaveBeenCalledTimes(0); @@ -263,7 +287,7 @@ describe('ChromyRunner', () => { { name: 'execute', value: () => {} }, ], }; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(true); expect(chromy.evaluate).toHaveBeenCalledTimes(1); expect(loggerCalls[0]).toEqual('waiting for to execute function in browser'); @@ -279,7 +303,7 @@ describe('ChromyRunner', () => { { name: 'execute', value: 123 }, ], }; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(false); expect(chromy.evaluate).toHaveBeenCalledTimes(0); expect(loggerCalls[0]).toEqual('failed to detect execute function'); @@ -299,7 +323,7 @@ describe('ChromyRunner', () => { { name: 'freezeImage', value: 'selector' }, ], }; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(true); expect(chromy.evaluate).toHaveBeenCalledWith('return string function'); expect(functionToString).toHaveBeenCalledWith(freezeImage, 'selector'); @@ -318,7 +342,7 @@ describe('ChromyRunner', () => { { name: 'freezeImage', value: 'selector' }, ], }; - const result = await run(chromy, globalConfig, newConfig); + const result = await run(chromy, globalConfig, newConfig, mockReporter); expect(result).toEqual(false); expect(chromy.evaluate).toHaveBeenCalledWith('return string function'); expect(functionToString).toHaveBeenCalledWith(freezeImage, 'selector'); diff --git a/src/compareImage.test.js b/src/compareImage.test.js index 651d713..1e552a9 100644 --- a/src/compareImage.test.js +++ b/src/compareImage.test.js @@ -133,4 +133,49 @@ describe('Compare Image', () => { expect(mockWrite).toHaveBeenCalledWith('./differencify_report/test_differencified.png'); } }); + + it('adds a result to reporter if saveDifferencifiedImage is true', async () => { + expect.assertions(1); + Jimp.distance.mockReturnValue(0.02); + const mockWrite = jest.fn(); + Jimp.diff.mockReturnValue({ + percent: 0.02, + image: { + write: mockWrite, + }, + }); + try { + // eslint-disable-next-line prefer-object-spread/prefer-object-spread + await compareImage(Object.assign({}, mockConfig, { saveDifferencifiedImage: true }), 'test', mockReporter); + } catch (err) { + expect(mockReporter.addResult).toHaveBeenCalledWith( + false, + './differencify_report/test.png', + expect.stringContaining('mismatch found'), + './differencify_report/test_differencified.png', + ); + } + }); + + it('adds a result to reporter if saveDifferencifiedImage is false', async () => { + expect.assertions(1); + Jimp.distance.mockReturnValue(0.02); + const mockWrite = jest.fn(); + Jimp.diff.mockReturnValue({ + percent: 0.02, + image: { + write: mockWrite, + }, + }); + try { + // eslint-disable-next-line prefer-object-spread/prefer-object-spread + await compareImage(Object.assign({}, mockConfig, { saveDifferencifiedImage: false }), 'test', mockReporter); + } catch (err) { + expect(mockReporter.addResult).toHaveBeenCalledWith( + false, + './differencify_report/test.png', + expect.stringContaining('mismatch found'), + ); + } + }); });