Security News
Weekly Downloads Now Available in npm Package Search Results
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
arrow-mocha
Advanced tools
ES6 arrow functions have static, lexical this
binding. This is a great
feature, but it prevents them from playing nicely with Mocha, because
Mocha provides the test context using dynamic this
binding:
before(function() {
this.myObj = new MyAwesomeThing()
})
it('some test', function() {
console.log('myObj is:', this.myObj) // MyAwesomeThing {}
})
This will not work for arrow functions:
it('some test', () => console.log('myObj is:', this.myObj)) // undefined, `this` points to the global object
This little library provides a set of patched Mocha functions (it
,
before
, after
, beforeEach
and afterEach
) that pass the context
as the first argument to your arrows:
before(t => {
t.myObj = new MyAwesomeThing()
})
it('some test', t => console.log('myObj is:', t.myObj)) // MyAwesomeThing {}
This is done by wrapping each arrow into the usual function, obtaining the
context through this
and passing it to the first argument of the arrow.
// This line is important, otherwise the magic will not work!
// Is is commented because it breaks GitHub syntax highlighting.
//
// import { it, before, after, beforeEach, afterEach } from 'arrow-mocha'
describe('The functions imported on the previous line decorate the corresponding Mocha functions', () =>
{
describe('so that the Mocha test context gets passed to the first argument', () => {
before(t => {
t.some = 'value'
})
it('like this', t => assert.equal(t.some, 'value'))
})
describe('this works for async tests too:', () => {
const delay = (ms, value) => new Promise(resolve => {
setTimeout(resolve, ms, value)
})
before(t => {
return delay(10, 'value').then(v => {
t.another = v
})
})
describe('when a test/hook returns a Promise', () => {
it('the context is passed to the first argument', t => delay(10).then(() => {
assert.equal(t.another, 'value')
}))
})
})
describe('when an async test/hook requires a callback,', () => {
const delay = (ms, fn) => {
setTimeout(fn, ms)
}
before((t, done) => {
return delay(10, () => {
t.third = 'value'
done()
})
})
describe('declare it as the second argument;', () => {
it('the context will be passed to the first arg', (t, done) => delay(10, () => {
assert.equal(t.third, 'value')
done()
}))
})
})
})
MIT
FAQs
Provides your ES6 arrow functions with Mocha test context
The npm package arrow-mocha receives a total of 350 weekly downloads. As such, arrow-mocha popularity was classified as not popular.
We found that arrow-mocha demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket's package search now displays weekly downloads for npm packages, helping developers quickly assess popularity and make more informed decisions.
Security News
A Stanford study reveals 9.5% of engineers contribute almost nothing, costing tech $90B annually, with remote work fueling the rise of "ghost engineers."
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.