This CLI tool allows to organize mocha tests in files and directories. It works by traversing the test directory recursively, creating describe blocks per directory and tests per *.test.js file.
# npm
$ npm install mocha-per-file
# Yarn
$ yarn add mocha-per-file
|- src
|- test
|- api
| |- empty-input.test.js
| |- array.test.js
| |- exception.test.js
|- cli
|- args.test.js
|- options.test.js
// empty-input.test.js
const expect = require('expect')
// simple test
module.exports = () => expect(1).toEqual(1)
// test with timeout
module.exports = {
it: expect(1).toEqual(2),
timeout: 5000,
}
// test only this file
module.exports = {
it: expect(1).toEqual(2),
only: true,
}
In npm test
in package.json
:
{
"scripts": {
"test": "mocha-per-file"
}
}
Via bash:
$ npx mocha-per-file
api
✓ empty-input
✓ array
✓ exception
cli
✓ args
✓ options
$ npx mocha-per-file --path special-tests
Some mocha parameters are also supported and can be passed through. For information on this, check out mocha-per-file --help
.
$ npx mocha-per-file --require @babel/register
If more are needed feel free to open an issue or a PR! 😃
You can execute only some of the tests by providing a filename or glob. Please mind that the path has to be relative to the specified test folder.
$ npx mocha-per-file empty-input.test.js
$ npx mocha-per-file api/*
It is possible to tell mocha-per-file
to chdir
into the directory of each test file when running the tests via the --chdir
parameter:
$ npx mocha-per-file --chdir
This makes it much easier to work with local fixtures:
// files.test.js
const expect = require('expect')
const { readFile } = require('fs-extra')
// process.cwd() is now in the test directory
module.exports = async () => expect(await readFile('foo.txt', 'utf8')).toEqual('foo')
with-local-tmp-dir is a package that allows us to create a temporary folder inside a given directory and remove it after having finished a callback. This makes it the perfect tool to run file-based tests. The following snippet illustrates this:
// files.test.js
const expect = require('expect')
const { writeFile, readFile } = require('fs-extra')
module.exports = () => withLocalTmpDir(async () => {
await writeFile('foo.txt', 'foo')
expect(await readFile('foo.txt', 'utf8')).toEqual('foo')
})
Are you missing something or want to contribute? Feel free to file an issue or a pull request! ⚙️
Hey, I am Sebastian Landwehr, a freelance web developer, and I love developing web apps and open source packages. If you want to support me so that I can keep packages up to date and build more helpful tools, you can donate here:
If you want to send me a one time donation. The coffee is pretty good 😊.
Also for one time donations if you like PayPal.
Here you can support me regularly, which is great so I can steadily work on projects.
Thanks a lot for your support! ❤️