martin8768
martin8768

Reputation: 576

Is there any way to add callbacks to Jest when all tests succeed or fail?

I'd like to run a callback when all the tests in a describe block pass (or fail), is there some hook or something in the Jest API to do this? I could not find anything applicable in the docs.

I'm making several API requests to collect data in order to compare it to data in a CSV file, in order to diff the contents. When the tests have all passed, I would like to save all the API responses in a file, therefore I need some sort of 'all tests passed' callback

Upvotes: 0

Views: 581

Answers (2)

Estus Flask
Estus Flask

Reputation: 222369

There is afterAll that is aware of describe but runs regardless of test results. It can be used as a part of function to aggregate data from tests:

let responses;

testAndSaveResponses((name, fn) => {
  if (!responses) {
    responses = [];
  } else {
    afterAll(async () => {
      if (!responses.includes(null)) {
        // no errors, proceed with response processing
      }
    });
  }

  test(name, async () => {
    try {
      responses.push(await fn());
    } catch (err) {
      responses.push(null);
      throw err;
    }
  });
});

It's supposed to be used instead of Jest test and be enhanced to support multiple describe scopes.

There is custom environment. Circus runner allows to hook test events, finish_describe_definition in particular. It is applied to all tests, unaware of custom data (e.g. responses that need to be saved) and should interact with them through global variables.

There is custom reporter, it receives a list of passed and failed tests. It is applied to all tests, unaware of custom data defined in tests and doesn't have access to globals from test scope so cannot be used to collect responses.

Upvotes: 0

Daniel
Daniel

Reputation: 2531

You can run jest programmatically. Note that this approach is "hack" because there is no official support for running jest like this.

see: https://medium.com/web-developers-path/how-to-run-jest-programmatically-in-node-js-jest-javascript-api-492a8bc250de

Upvotes: 1

Related Questions