Modify Reporter Output
Article Summary
The onBeforeWrite hook allows you to modify the output of a reporter.
If you want your reports to include custom content, you have the option to create a custom reporter from scratch. However, this approach takes time and effort. Use the onBeforeWrite hook if you want to make minor changes to the output of an existing reporter.
Define an onBeforeWrite hook in a JavaScript configuration file. The following hook adds the duration in milliseconds to every test entry in the report:
//.testcaferc.js or .testcaferc.cjs
function onBeforeWriteHook(writeInfo) { // This function will fire every time the reporter calls the "write" method.
if (writeInfo.initiator === 'reportTestDone') { // The "initiator" property contains the name of the reporter event that triggered the hook.
const {
name,
testRunInfo,
meta
} = writeInfo.data || {}; // If you attached this hook to a compatible reporter (such as "spec" or "list"), the hook can process data related to the event.
const testDuration = testRunInfo.durationMs; // Save the duration of the test.
writeInfo.formattedText = writeInfo.formattedText + ' (' + testDuration + 'ms)'; // Add test duration to the reporter output.
};
}
module.exports = { // Attach the hook
hooks: {
reporter: {
onBeforeWrite: {
'spec': onBeforeWriteHook, // This hook will fire when you use the default "spec" reporter.
},
},
},
};

Table Of Contents
Attach the Hook
Use a JavaScript configuration file to define and attach reporter hooks.
The hooks.reporter.onBeforeWrite property attaches onBeforeWrite hooks to reporters. Populate this property with key-value pairs, where the key is the name of the reporter, and the value is the corresponding hook function.
module.exports = {
hooks: {
reporter: {
onBeforeWrite: {
'spec': hookFunction,
'list': aDifferentHookFunction
},
},
},
};
Create a Hook Function
The onBeforeWrite hook function intercepts reporter output every time the reporter fires the write method.
Consider the following hook function:
function onBeforeWriteHook(writeInfo) {
if (writeInfo.initiator === 'reportTestDone') { // Determine the reporter event
const dateTime = new Date().toLocaleString('en-US', { timeZone: 'UTC' });
writeInfo.formattedText = dateTime + writeInfo.formattedText; // Modify reporter output
};
}
The function receives an object with the following properties:
Property Type Description initiator String The name of the reporter event data Object Event data (different for different events) formattedText String The text that reaches stdoutformatOptions Object The formatting options of the reporter ( indentandwordWrap)Note
The following reporters share event data with
onBeforeWritehooks out of the box:speclistminimal
If you want the
onBeforeWritehook to access data from a custom reporter, change the code of the target reporter.The function uses the
initiatorproperty to find the name of the current reporter event.- The function modifies the value of the
formattedTextproperty to change the reporter output.
Process Different Reporter Events
TestCafe executes the onBeforeWrite hook every time the target reporter calls a write method. If you attach the hook to a compatible reporter (spec, list, or minimal), you can process data from the following events:
Different events pass different data to the hook function.
reportTaskStart
The reporter fires the reportTaskStart event when TestCafe initializes the first browser. During this stage, the spec reporter lists browsers that the user selected for the test run. For example:
Running tests in:
- Chrome 112.0.0.0 / Ventura 13
Compatible reporters pass the following data to the onBeforeWrite hook during the reportTaskStart event:
| property | type | definition |
|---|---|---|
| startTime | Date | The test run start time and date |
| userAgents | Array | The list of browsers that the user selected for the test run |
| testCount | Number | The total number of tests in the test suite |
reportFixtureStart
The reporter fires the rerportFixtureStart event when TestCafe launches the first test from a fixture. During this stage, the spec reporter outputs the name of the fixture. For example:
Homepage Tests
Compatible reporters pass the following data to the onBeforeWrite hook during the reportFixtureStart event:
| property | type | definition |
|---|---|---|
| name | String | The name of the fixture |
| path | String | The path to the test file |
| meta | Object | The fixture metadata |
reportTestStart
The reporter fires the reportTestStart event when TestCafe launches a test.
Compatible reporters pass the following data to the onBeforeWrite hook during the reportTestStart event:
| property | type | definition |
|---|---|---|
| name | String | The name of the test |
| meta | Object | The test metadata |
reportTestDone
The reporter fires the reportTestDone event when TestCafe concludes the test. During this stage, the spec reporter displays the name and status of the test. For example:
✓ My first test
Compatible reporters pass the following data to the onBeforeWrite hook during the reportTestDone event:
| property | type | definition |
|---|---|---|
| name | Date | The test run start time and date |
| testRunInfo | Object | The object with test run data (duration, status, etc.) |
| meta | Object | The test metadata |
reportTaskDone
The reporter fires the reportTaskDone event when TestCafe concludes the final test. During this stage, the spec reporter displays the number of successful tests and the test task’s total runtime. For example:
1 passed (4s)
Compatible reporters pass the following data to the onBeforeWrite hook during the reportTaskDone event:
| property | type | definition |
|---|---|---|
| endTime | Date | The time and date of the test run’s conclusion |
| passed | Number | The number of successful tests |
| warnings | Object | The full list of warnings the tests raised |
| result | Object | The number of successful, failed, and skipped tests from the test run |
Limitations
The following reporters share event data with onBeforeWrite hooks out of the box:
speclistminimal
If you want the `onBeforeWrite` hook to access data from a custom reporter, change the code of the target reporter.