Monday, June 16, 2025
HomeJavaScriptThe `beforeEach()` Hook in Mocha

The `beforeEach()` Hook in Mocha


Jul 19, 2023

By default, Mocha’s BDD interface provides a world beforeEach() perform.
You possibly can name beforeEach() with a perform, and Mocha will execute that perform earlier than each take a look at within the suite.

beforeEach(perform() {
  console.log('Operating beforeEach!');
});


it('test1', perform() {});

it('test2', perform() {});

With describe()

describe() helps you to scope beforeEach() hooks.
In case you outline a beforeEach() in a describe(), Mocha won’t run that beforeEach() on any checks outdoors of that describe().

beforeEach(perform() {
  console.log('Operating world beforeEach!');
});

describe('my take a look at suite', perform() {
  beforeEach(perform() {
    console.log('Operating my take a look at suite beforeEach!');
  });

  
  it('test1', perform() {});
  
  it('test2', perform() {});
});


it('test3', perform() {});

So a world beforeEach() will run on each take a look at, even checks inside a describe().
However a beforeEach() hook inside a describe() won’t run on any take a look at outdoors of that describe().

Working Round Linters

By default, linters like ESLint complain that beforeEach() will not be outlined.
There are a few workarounds.
First, you’ll be able to explicitly import beforeEach() from Mocha:

const { beforeEach } = require('mocha');

Or, you’ll be able to set the ESLint Mocha atmosphere in a .eslintrc.js in your take a look at folder as follows.
For instance, Mongoose makes use of this strategy to keep away from having to explicitly import Mocha hooks.


module.exports = {
  env: {
    mocha: true
  }
};

Extra Mocha Tutorials

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments