The `beforeEach()` Hook in Mocha
By default, Mocha's BDD interface adds a global beforeEach() function.
You can call beforeEach() with a function, and Mocha will execute that function before every test in the suite.
beforeEach(function() {
  console.log('Running beforeEach!');
});
// Prints "Running beforeEach!"
it('test1', function() {});
// Prints "Running beforeEach!"
it('test2', function() {});With describe()
describe() lets you scope beforeEach() hooks.
If you define a beforeEach() in a describe(), Mocha will not run that beforeEach() on any tests outside of that describe().
beforeEach(function() {
  console.log('Running global beforeEach!');
});
describe('my test suite', function() {
  beforeEach(function() {
    console.log('Running my test suite beforeEach!');
  });
  // Prints both "Running beforeEach!" and "Running my test suite beforeEach!"
  it('test1', function() {});
  // Prints both "Running beforeEach!" and "Running my test suite beforeEach!"
  it('test2', function() {});
});
// Only prints "Running global beforeEach!"
it('test3', function() {});So a global beforeEach() will run on every test, even tests within a describe().
But a beforeEach() hook within a describe() will not run on any test outside of that describe().
Skipped Tests
Mocha will not run beforeEach() if there are no tests.
For example, if you run a single Mocha test using .only(), Mocha will not execute the beforeEach() hook in the following test file.
describe('my test suite', function() {
  beforeEach(function() {
    console.log('Running my test suite beforeEach!');
  });
  it('test1', function() {});
  it('test2', function() {});
});
// Because of `.only()`, Node will **not** print
// "Running my test suite beforeEach!"
it.only('test3', function() {});Working Around Linters
By default, linters like ESLint complain that beforeEach() is not defined.
There are a couple of workarounds.
First, you can explicitly import beforeEach() from Mocha:
const { beforeEach } = require('mocha');Or, you can set the ESLint Mocha environment in a .eslintrc.js in your test folder as follows.
For example, Mongoose uses this approach to avoid having to explicitly import Mocha hooks.
// .eslintrc.js
module.exports = {
  env: {
    mocha: true
  }
};