/
TestReporter.js
89 lines (74 loc) · 2.31 KB
/
TestReporter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/**
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
/**
* TestReporter
* Reporter for testing the outputs, without any extra
* hassle. Uses a JSON like syntax for testing the reporters
* instead of outputting the text to stdout and using match functions
* to get the output.
*/
class TestReporter {
constructor(globalConfig, reporterOptions, reporterContext) {
this._context = reporterContext;
this._options = reporterOptions;
/**
* statsCollected property
* contains most of the statistics
* related to the object to be called,
* This here helps us in avoiding the string match
* statements nothing else
*/
this._statsCollected = {
onRunComplete: {},
onRunStart: {},
onTestResult: {times: 0},
onTestStart: {},
reporterContext,
reporterOptions,
};
}
/**
* clearLine
* clears the line for easier JSON parsing
*/
clearLine() {
if (process.stdout.isTTY) {
process.stderr.write('\x1b[999D\x1b[K');
}
}
onTestStart(path) {
const onTestStart = this._statsCollected.onTestStart;
onTestStart.called = true;
onTestStart.path = typeof path === 'string';
}
onTestResult(test, testResult, results) {
const onTestResult = this._statsCollected.onTestResult;
onTestResult.called = true;
onTestResult.times++;
}
onRunStart(results, options) {
this.clearLine();
const onRunStart = this._statsCollected.onRunStart;
onRunStart.called = true;
onRunStart.options = typeof options;
}
onRunComplete(testContexts, results) {
const onRunComplete = this._statsCollected.onRunComplete;
onRunComplete.called = true;
onRunComplete.numPassedTests = results.numPassedTests;
onRunComplete.numFailedTests = results.numFailedTests;
onRunComplete.numTotalTests = results.numTotalTests;
if (this._statsCollected.reporterOptions.maxWorkers) {
// Since it's a different number on different machines.
this._statsCollected.reporterOptions.maxWorkers = '<<REPLACED>>';
}
// The Final Call
process.stdout.write(JSON.stringify(this._statsCollected, null, 4));
}
}
module.exports = TestReporter;