CodeceptJS icon indicating copy to clipboard operation
CodeceptJS copied to clipboard

Event listener event.dispatcher.on(event.test.failed) doesn't work with Before and Background sections

Open vitaliisotnichenko opened this issue 3 years ago • 0 comments

What are you trying to achieve?

The goal - to create custom hook with event listener to perform retry of scenarios in case of getting failed tests due to certain network issues.

Custom hook has the following code:

`const event = require('codeceptjs').event;

module.exports = function () {

event.dispatcher.on(event.test.failed, function (test, err) {

    switch (true) {
        case err.message.includes(`browserContext.addCookies: Browser has been closed`):
        case err.message.includes(`Cannot read property 'addCookies' of undefined`):
        case err.message.includes(`Cannot read property 'waitForSelector' of null`):
        case err.message.includes(`Cannot read property 'waitForSelector' of undefined`):
        case err.message.includes(`Cannot read property 'goto' of undefined`):
        case err.message.includes(`Cannot read property 'goto' of null`):
        case err.message.includes(`page.goto: net::ERR_NETWORK_CHANGED`):
        case err.message.includes(`page.goto: net::ERR_NAME_NOT_RESOLVED`):
        case err.message.includes(`page.goto: net::ERR_TIMED_OUT`):
            test._retries = 5;
            break;
        default:
            return;
    }

});

}`

What do you get instead?

It works when the scenarios are written without Before or Background section (for BDD tests), but since our test failure occurs in Before and Background sections (above issues usually happen exactly there), custom hook/event listener won't work.

Obviously, that in this case we have to duplicate a lot of steps in our project

Details

  • CodeceptJS version: 3.0.7
  • NodeJS Version: 14.15.1
  • Operating System: Mac OS, Linux
  • playwright: 1.12.0

vitaliisotnichenko avatar Jul 26 '21 10:07 vitaliisotnichenko