eater v4.0.4
Eater
Eater is Ea sy t est runn er . Eater has one simple rule.
If test file outputs `stderr` message, the test failed.
#Features
- Multi-process: All eater test files run as separate processes and eater does not launch too many processes more than CPU-core number.
- Easy mock: An eater test does not affect the other tests, but mock object sometimes kills your test.
- Happy async: eater aims is here to handle async test well. Each eater files will run in
Node.js
child_process, so the tests always should be async first. If your tests mix sync and async tests, you will have a headache to maintain the tests.
Demo
#How to use
1. Install
$ npm install eater -g
2. Write some tests
// test/sometest.js
const assert = require('assert');
assert(1 === 2); // always failure
Run
$ eater
eater --dir
and --ext
and --glob
eater searches JavaScript files under process.cwd()/test
dir by default. If you want to change the dir, use --dir
option.
$ eater --dir spec/
And if you changed test file extension, like .jsx/.es6/.test.js
, you use --ext
option.
$ eater --ext jsx
eater can find test files using glob pattern match. you use --glob
option.
$ eater --glob **/__test/**/*.js
file
$ eater test/sometest.js test/foo.js test/bar.jd
If you are power-assert user
1. install power-assert
and espower-loader
$ npm install eater -D
$ npm install power-assert espower-loader -D
2. enable power-assert
// script/enable-power-assert.js
require('espower-loader')({
cwd: process.cwd(),
pattern: 'test/**/*.js'
});
3. run tests with --require
$ eater --require ./script/enable-power-assert.js
If you are babel(JSX) user
1. install babel-register
or active-cache-babel-register
$ npm install eater -D
$ npm install babel-register -D
or
$ npm install eater -D
$ npm install active-cache-babel-register -D
Note: active-cache-babel-register improves babel transpilation performance.
2. enable babel
// script/enable-babel.js
require('babel-register')({ // or to use require('active-cache-babel-register')
ignore: (file) => {
if (file.match(/node_modules/)) return true;
return false;
}
});
3. run tests with --require
$ eater --require ./script/enable-babel.js
if you are power-assert and babel user:
1. install babel-preset-power-assert
$ npm install babel-preset-power-assert -D
2. write your .babelrc
{
"presets": ["es2015", "babel-preset-power-assert"]
}
3. run tests with --require
$ eater --require ./script/enable-babel.js
Coverage
1. install nyc instead of istanbul
$ npm install nyc -D
2. run test with nyc
$ nyc eater
eater runner settings
eater reads the arguments from settings.
- package.json
- .eaterrc
package.json
{
"name": "eaterDemo",
"version": "1.0.0",
"scripts": {
"test": "eater"
},
"eater": {
"dir": "test/core",
"require": [
"./enable-power-assert.js",
"./enable-jsx.js"
]
}
}
.eaterrc
.eaterrc is JSON5 format so you can write comment and trailing commas.
{
dir: "test/core",
require: [
"./enable-power-assert.js",
"./enable-jsx.js",
],
}
runner
If you would like to use test runner, eater has test
function.
const calc = require('../foo/bar/calc');
const test = require('eater/runner').test;
const assert = require('assert');
test('give 2 arguments return sum', () => {
const result = calc.sum(1, 2);
assert(result === 3);
});
test('give 2 arguments return sum on async', () => {
const result = calc.sumAsync(1, 2);
result.then((value) => {
assert(value === 3)
});
});
Note that each subtests also run as separated processes, you don't have to care about sync/async stuff.
Use custom reporter
$ npm install eater-pacman-reporter
$ eater --reporter eater-pacman-reporter
Custom Reporters
Exclusive feature
The exclusivity feature allows you to run only
the specified test code by adding // eater:only
comment on top of your test code. Here's an example.
// eater:only
const test = require('eater/lib/runner').test;
const mustCall = require('must-call');
const assert = require('power-assert');
test('only is executed', () => {
assert(true);
});
And if you need to exclude your test case, only
function is helpful.
// eater:only
const only = require('eater/lib/runner').only;
const test = require('eater/lib/runner').test;
const mustCall = require('must-call');
const assert = require('power-assert');
test('this test should not execute', (_, fail) =>{
fail('should not be executed');
});
only('only is executed', () => {
assert(true);
});
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago