Skip to content

Commit f1bddd4

Browse files
authored
Merge pull request #21 from NimaSoroush/prefix-logger
Create prefix logger for tests
2 parents 62b1dfc + d4173dd commit f1bddd4

File tree

7 files changed

+97
-57
lines changed

7 files changed

+97
-57
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
"regenerator-runtime": "^0.10.5"
4747
},
4848
"dependencies": {
49+
"chalk": "^2.0.1",
4950
"chromy": "^0.3.2",
5051
"fs": "0.0.1-security",
5152
"jimp": "^0.2.28"

src/chromyRunner.js

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,55 +4,56 @@ import compareImage from './compareImage';
44
import actions from './actions';
55
import { configTypes } from './defaultConfig';
66

7-
const saveImage = (filename, image, testType, screenshotsPath, testReportPath) => {
7+
const saveImage = (testName, image, testType, screenshotsPath, testReportPath) => {
88
const directory = testType === configTypes.test ? testReportPath : screenshotsPath;
9-
const filePath = `${directory}/${filename}.png`;
10-
logger.log(`screenshot saved in -> ${filePath}`);
9+
const filePath = `${directory}/${testName}.png`;
10+
logger.prefix(testName).log(`screenshot saved in -> ${filePath}`);
1111
return fs.writeFileSync(filePath, image);
1212
};
1313

1414
const run = async (chromy, options, test) => {
15+
const prefixedLogger = logger.prefix(test.name);
1516
// eslint-disable-next-line no-restricted-syntax
1617
for (const action of test.steps) {
1718
switch (action.name) {
1819
case actions.goto:
1920
try {
2021
await chromy.goto(action.value);
21-
logger.log(`goto -> ${action.value}`);
22+
prefixedLogger.log(`goto -> ${action.value}`);
2223
} catch (error) {
23-
logger.error(error);
24+
prefixedLogger.error(error);
2425
return false;
2526
}
2627
break;
2728
case actions.capture:
2829
switch (action.value) {
2930
case 'document':
3031
try {
31-
logger.log('Capturing screenshot of whole DOM');
32+
prefixedLogger.log('capturing screenshot of whole DOM');
3233
const png = await chromy.screenshotDocument();
3334
saveImage(test.name, png, test.type, options.screenshots, options.testReportPath);
3435
} catch (error) {
35-
logger.error(error);
36+
prefixedLogger.error(error);
3637
return false;
3738
}
3839
break;
3940
case undefined:
4041
try {
41-
logger.log('Capturing screenshot of chrome window');
42+
prefixedLogger.log('capturing screenshot of chrome window');
4243
const png = await chromy.screenshot();
4344
saveImage(test.name, png, test.type, options.screenshots, options.testReportPath);
4445
} catch (error) {
45-
logger.error(error);
46+
prefixedLogger.error(error);
4647
return false;
4748
}
4849
break;
4950
default:
5051
try {
51-
logger.log(`Capturing screenshot of ${action.value} selector`);
52+
prefixedLogger.log(`capturing screenshot of ${action.value} selector`);
5253
const png = await chromy.screenshotSelector(action.value);
5354
saveImage(test.name, png, test.type, options.screenshots, options.testReportPath);
5455
} catch (error) {
55-
logger.error(error);
56+
prefixedLogger.error(error);
5657
return false;
5758
}
5859
break;
@@ -61,9 +62,9 @@ const run = async (chromy, options, test) => {
6162
case actions.test:
6263
try {
6364
const result = await compareImage(options, test.name);
64-
logger.log(result);
65+
prefixedLogger.log(result);
6566
} catch (error) {
66-
logger.error(error);
67+
prefixedLogger.error(error);
6768
return false;
6869
}
6970
break;

src/chromyRunner.test.js

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,27 @@ import logger from './logger';
55
import { globalConfig, testConfig, configTypes } from './defaultConfig';
66
import actions from './actions';
77

8-
jest.mock('chromy', () => jest.fn().mockImplementation(() =>
9-
({
10-
goto: jest.fn(),
11-
close: jest.fn(),
12-
screenshotDocument: jest.fn(() => 'png file'),
13-
screenshotSelector: jest.fn(() => 'png file'),
14-
screenshot: jest.fn(() => 'png file'),
15-
}),
16-
));
8+
jest.mock('chromy', () => jest.fn(() =>
9+
({
10+
goto: jest.fn(),
11+
close: jest.fn(),
12+
screenshotDocument: jest.fn(() => 'png file'),
13+
screenshotSelector: jest.fn(() => 'png file'),
14+
screenshot: jest.fn(() => 'png file'),
15+
}),
16+
));
1717

1818
jest.mock('./compareImage', () => jest.fn(arg =>
19-
new Promise((resolve, reject) => {
20-
if (arg.screenshots === './screenshots') {
21-
return resolve('Saving the diff image to disk');
22-
}
23-
return reject('error');
24-
}),
25-
));
19+
new Promise((resolve, reject) => {
20+
if (arg.screenshots === './screenshots') {
21+
return resolve('Saving the diff image to disk');
22+
}
23+
return reject('error');
24+
}),
25+
));
2626

2727
let loggerCalls = [];
28+
logger.prefix = () => logger;
2829
logger.log = (...args) => {
2930
loggerCalls.push(...args);
3031
};
@@ -46,7 +47,7 @@ describe('ChromyRunner', () => {
4647
const result = await run(chromy, globalConfig, testConfig);
4748
expect(result).toEqual(true);
4849
expect(loggerCalls[0]).toEqual('goto -> www.example.com');
49-
expect(loggerCalls[1]).toEqual('Capturing screenshot of whole DOM');
50+
expect(loggerCalls[1]).toEqual('capturing screenshot of whole DOM');
5051
expect(loggerCalls[2]).toEqual('screenshot saved in -> ./screenshots/default.png');
5152
expect(writeFileSyncCalls).toEqual(['./screenshots/default.png', 'png file']);
5253
});
@@ -55,7 +56,7 @@ describe('ChromyRunner', () => {
5556
const result = await run(chromy, globalConfig, testConfig);
5657
expect(result).toEqual(true);
5758
expect(loggerCalls[0]).toEqual('goto -> www.example.com');
58-
expect(loggerCalls[1]).toEqual('Capturing screenshot of whole DOM');
59+
expect(loggerCalls[1]).toEqual('capturing screenshot of whole DOM');
5960
expect(loggerCalls[2]).toEqual('screenshot saved in -> ./differencify_report/default.png');
6061
expect(writeFileSyncCalls).toEqual(['./differencify_report/default.png', 'png file']);
6162
});
@@ -67,7 +68,7 @@ describe('ChromyRunner', () => {
6768
testConfig.steps.pop({ name: actions.test, value: globalConfig.testReportPath });
6869
expect(result).toEqual(true);
6970
expect(loggerCalls[0]).toEqual('goto -> www.example.com');
70-
expect(loggerCalls[1]).toEqual('Capturing screenshot of whole DOM');
71+
expect(loggerCalls[1]).toEqual('capturing screenshot of whole DOM');
7172
expect(loggerCalls[2]).toEqual('screenshot saved in -> ./differencify_report/default.png');
7273
expect(writeFileSyncCalls).toEqual(['./differencify_report/default.png', 'png file']);
7374
});
@@ -76,7 +77,7 @@ describe('ChromyRunner', () => {
7677
const result = await run(chromy, globalConfig, testConfig);
7778
expect(result).toEqual(true);
7879
expect(loggerCalls[0]).toEqual('goto -> www.example.com');
79-
expect(loggerCalls[1]).toEqual('Capturing screenshot of whole DOM');
80+
expect(loggerCalls[1]).toEqual('capturing screenshot of whole DOM');
8081
expect(loggerCalls[2]).toEqual('screenshot saved in -> ./screenshots/default.png');
8182
expect(writeFileSyncCalls).toEqual(['./screenshots/default.png', 'png file']);
8283
});
@@ -98,7 +99,7 @@ describe('ChromyRunner', () => {
9899
const result = await run(chromy, globalConfig, newConfig);
99100
expect(result).toEqual(true);
100101
expect(loggerCalls[0]).toEqual('goto -> www.example.com');
101-
expect(loggerCalls[1]).toEqual('Capturing screenshot of chrome window');
102+
expect(loggerCalls[1]).toEqual('capturing screenshot of chrome window');
102103
expect(loggerCalls[2]).toEqual('screenshot saved in -> ./differencify_report/default.png');
103104
expect(writeFileSyncCalls).toEqual(['./differencify_report/default.png', 'png file']);
104105
});
@@ -118,7 +119,7 @@ describe('ChromyRunner', () => {
118119
const result = await run(chromy, globalConfig, newConfig);
119120
expect(result).toEqual(true);
120121
expect(loggerCalls[0]).toEqual('goto -> www.example.com');
121-
expect(loggerCalls[1]).toEqual('Capturing screenshot of whole DOM');
122+
expect(loggerCalls[1]).toEqual('capturing screenshot of whole DOM');
122123
expect(loggerCalls[2]).toEqual('screenshot saved in -> ./differencify_report/default.png');
123124
expect(writeFileSyncCalls).toEqual(['./differencify_report/default.png', 'png file']);
124125
});
@@ -138,7 +139,7 @@ describe('ChromyRunner', () => {
138139
const result = await run(chromy, globalConfig, newConfig);
139140
expect(result).toEqual(true);
140141
expect(loggerCalls[0]).toEqual('goto -> www.example.com');
141-
expect(loggerCalls[1]).toEqual('Capturing screenshot of #form selector');
142+
expect(loggerCalls[1]).toEqual('capturing screenshot of #form selector');
142143
expect(loggerCalls[2]).toEqual('screenshot saved in -> ./differencify_report/default.png');
143144
expect(writeFileSyncCalls).toEqual(['./differencify_report/default.png', 'png file']);
144145
});

src/compareImage.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,43 @@ import Jimp from 'jimp';
22
import logger from './logger';
33

44
const compareImage = async (options, testName) => {
5+
const prefixedLogger = logger.prefix(testName);
56
const referenceFile = `${options.screenshots}/${testName}.png`;
67
const testFile = `${options.testReportPath}/${testName}.png`;
78

8-
logger.log(`${testName}: comparing ${referenceFile} and ${testFile}`);
9+
prefixedLogger.log(`comparing ${referenceFile} and ${testFile}`);
910

1011
let referenceImage;
1112
try {
1213
referenceImage = await Jimp.read(referenceFile);
1314
} catch (err) {
14-
throw new Error(`${testName}: failed to read reference image ${err}`);
15+
throw new Error(`failed to read reference image ${err}`);
1516
}
1617

1718
let testImage;
1819
try {
1920
testImage = await Jimp.read(testFile);
2021
} catch (err) {
21-
throw new Error(`${testName}: failed to read test image ${err}`);
22+
throw new Error(`failed to read test image ${err}`);
2223
}
2324

2425
const distance = Jimp.distance(referenceImage, testImage);
2526
const diff = Jimp.diff(referenceImage, testImage, options.mismatchThreshold);
2627
if (distance < options.mismatchThreshold || diff.percent < options.mismatchThreshold) {
27-
return `${testName}: no mismatch found ✅`;
28+
return 'no mismatch found ✅';
2829
}
2930

3031
if (options.saveDifferencifiedImage) {
3132
try {
3233
const diffPath = `${options.testReportPath}/${testName}_differencified.png`;
3334
diff.image.write(diffPath);
34-
logger.log(`${testName}: saved the diff image to disk at ${diffPath}`);
35+
prefixedLogger.log(`saved the diff image to disk at ${diffPath}`);
3536
} catch (err) {
36-
throw new Error(`${testName}: failed to save the diff image ${err}`);
37+
throw new Error(`failed to save the diff image ${err}`);
3738
}
3839
}
3940

40-
throw new Error(`${testName}: mismatch found❗
41+
throw new Error(`mismatch found❗
4142
Result:
4243
distance: ${distance}
4344
diff: ${diff.percent}

src/compareImage.test.js

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ jest.mock('jimp', () => ({
1616

1717

1818
jest.mock('./logger', () => ({
19-
log: jest.fn(),
19+
prefix: () => ({
20+
log: jest.fn(),
21+
}),
2022
}));
2123

2224
describe('Compare Image', () => {
@@ -40,35 +42,35 @@ describe('Compare Image', () => {
4042
.mockReturnValueOnce(Promise.reject('error2'));
4143

4244
try {
43-
await compareImage(mockConfig, 'test1');
45+
await compareImage(mockConfig, 'test');
4446
} catch (err) {
45-
expect(err.message).toEqual('test1: failed to read reference image error1');
47+
expect(err.message).toEqual('failed to read reference image error1');
4648
}
4749

4850
try {
49-
expect(await compareImage(mockConfig, 'test2')).toThrow();
51+
expect(await compareImage(mockConfig, 'test')).toThrow();
5052
} catch (err) {
51-
expect(err.message).toEqual('test2: failed to read test image error2');
53+
expect(err.message).toEqual('failed to read test image error2');
5254
}
5355
});
5456

5557
it('returns correct value if difference below threshold', async () => {
5658
const result = await compareImage(mockConfig, 'test');
57-
expect(result).toEqual('test: no mismatch found ✅');
59+
expect(result).toEqual('no mismatch found ✅');
5860
});
5961

6062
it('returns correct value if only difference above threshold', async () => {
6163
Jimp.diff.mockReturnValue({ percent: 0.02 });
6264

6365
const result = await compareImage(mockConfig, 'test');
64-
expect(result).toEqual('test: no mismatch found ✅');
66+
expect(result).toEqual('no mismatch found ✅');
6567
});
6668

6769
it('returns correct value if only distance above threshold', async () => {
6870
Jimp.distance.mockReturnValue(0.02);
6971

7072
const result = await compareImage(mockConfig, 'test');
71-
expect(result).toEqual('test: no mismatch found ✅');
73+
expect(result).toEqual('no mismatch found ✅');
7274
});
7375

7476
it('throws error if distance and difference are above threshold', async () => {
@@ -79,7 +81,7 @@ describe('Compare Image', () => {
7981
try {
8082
await compareImage(mockConfig, 'test');
8183
} catch (err) {
82-
expect(err.message).toEqual(`test: mismatch found❗
84+
expect(err.message).toEqual(`mismatch found❗
8385
Result:
8486
distance: 0.02
8587
diff: 0.02

src/index.test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ fs.mkdirSync = (...args) => {
3131
};
3232

3333
let loggerCalls = [];
34+
logger.prefix = () => logger;
3435
logger.log = (...args) => {
3536
loggerCalls.push(...args);
3637
};
@@ -67,7 +68,7 @@ describe('Differencify', () => {
6768
expect(result).toEqual(true);
6869
expect(differencify.chromeInstancesId).toEqual(9223);
6970
expect(loggerCalls[0]).toEqual('goto -> www.example.com');
70-
expect(loggerCalls[1]).toEqual('Capturing screenshot of whole DOM');
71+
expect(loggerCalls[1]).toEqual('capturing screenshot of whole DOM');
7172
expect(loggerCalls[2]).toEqual('screenshot saved in -> screenshots/default.png');
7273
expect(writeFileSyncCalls).toEqual(['screenshots', './differencify_report', 'screenshots/default.png', 'png file']);
7374
});
@@ -76,7 +77,7 @@ describe('Differencify', () => {
7677
expect(result).toEqual(true);
7778
expect(differencify.chromeInstancesId).toEqual(9224);
7879
expect(loggerCalls[0]).toEqual('goto -> www.example.com');
79-
expect(loggerCalls[1]).toEqual('Capturing screenshot of whole DOM');
80+
expect(loggerCalls[1]).toEqual('capturing screenshot of whole DOM');
8081
expect(loggerCalls[2]).toEqual('screenshot saved in -> ./differencify_report/default.png');
8182
expect(writeFileSyncCalls).toEqual(['./differencify_report/default.png', 'png file']);
8283
});

0 commit comments

Comments
 (0)