It’s recommended not to use ES6 arrow functions if you want to use Mocha’s this.
Why? The reason is because Mocha globals like before, after, and it are bound to the same context.
Using function, you would get the following:
console.log(this.constructor.name); // Object
describe('test', function() {
console.log(this.constructor.name); // Suite
before(function() {
console.log(this.constructor.name); // Context
});
it('should pass', function() {
console.log(this.constructor.name); // Context
});
});
But with arrow functions, this is bound lexically, which means the (inner) function contains the scope of the parent function.
Now, you get something totally different:
console.log(this.constructor.name); // Object
describe('test', () => {
console.log(this.constructor.name); // Object
before(() => {
console.log(this.constructor.name); // Object
});
it('should pass', () => {
console.log(this.constructor.name); // Object
});
});
So as long as you don’t need to use Mocha’s this, arrow functions should be fine.
However, I had to learn the lesson the hard way, so this is an FYI for those who didn’t know.