How to conditionally use afterEach in your Playwright Tests

There are certain scenarios that you may run into where you want to use an afterEach in a test to clean up data, but not every scenario needs this data cleaned up. My specific example was a test where I was testing a POST endpoint. We have both positive and negative tests. When I successfully create with a POST I want to delete what I just created in an afterEach, but where I ran a negative test where I POST but expect a new item isn't created, I shouldn't need to run the afterEach to clean up that data, the afterEach would actually fail passing the id I want to delete, because it doesn't exist.

The solution was to make afterEach 'triggerable'. See the below code example, where we create a new variable triggerAfterEach and set to true in order to trigger an afterEach. If I don't assign triggerAfterEach in a test the afterEach code wouldn't be executed.

test.describe("Test Group", async () => {
  let triggerAfterEach: boolean;

  test.afterEach(async () => {
    if (triggerAfterEach) {
      //execute after code here

  test("Test Scenario with afterEach", async () => {
    triggerAfterEach = true;


  test("Test Scenario without afterEach", async () => {
    triggerAfterEach = false;


Credit Sergei for the solution!