https://github.com/azer/highkick
HighKick is a small testing framework that I like.
https://github.com/azer/highkick
Last synced: 9 months ago
JSON representation
HighKick is a small testing framework that I like.
- Host: GitHub
- URL: https://github.com/azer/highkick
- Owner: azer
- Created: 2011-09-28T23:29:15.000Z (over 14 years ago)
- Default Branch: master
- Last Pushed: 2013-03-04T21:57:27.000Z (over 13 years ago)
- Last Synced: 2025-07-19T13:49:46.052Z (11 months ago)
- Language: JavaScript
- Homepage:
- Size: 173 KB
- Stars: 15
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
HighKick is a small testing framework that I like.
```bash
$ npm install highkick
```

# Overview
It enables [ChaiJS'](http://chaijs.com/) `assert` and `expect` modules by default.
BDD:
```js
describe('Array', function(){
describe('#indexOf()', function(){
it('should return -1 when the value is not present', function(){
assert.equal(-1, [1,2,3].indexOf(5));
expect([1,2,3].indexOf(0).to.be(5));
})
})
})
```
CommonJS:
```javascript
exports.init = function init(options, callback){
startWebServer(callback);
}
exports.testFoo = function testFoo(callback){
get('http://localhost/api/foo', function(error, response){
if(error){
callback(error);
return;
}
assert.equal(response.foo, 'foo')
callback();
});
}
exports.end = function end(callback){
stopWebServer(callback);
}
```
# First Steps
HighKick takes a module and executes the functions that have a name starting with "test". A simple test module would look like this;
```javascript
var assert = require('assert');
exports.testFoo = function(callback){
try {
assert.something();
callback();
} catch (error) {
callback(error);
}
}
exports.testBar = function(callback){
setTimeout(callback, 100);
}
```
Below command will run the all tests defined in tests.js;
```bash
$ highkick tests.js
```
To specify the tests that needs to run;
```bash
$ kick=foo highkick tests.js
```
se comma for separating multiple test names, and '*' for running all tests.
## Before
An init function is called before the execution of the tests in a module for once. Init functions take an `options` object from HighKick and are able to
produce the first parameters of test functions as shown in the example below;
CommonJS:
```javascript
exports.before = function before(options, callback){
callback( undefined, +(new Date), Math.PI );
}
exports.testFoo = function(timestamp, pi, callback){
...
}
```
## beforeEach
Use `beforeEach` to define a function to be called before each test.
```javascript
function beforeEach(callback){
callback( undefined, +(new Date));
}
exports.testFoo = function(now, callback){
...
}
```
Similar to the `init` functions, what a `beforeEach` function produces is passed to test functions. The key difference is, `beforeEach` functions take parameters from `init` functions, too.
```javascript
exports.init = function(options, callback){
callback(undefined, 'hello');
}
exports.beforeEach = function(hello, callback){
callback(undefined, 'world';
}
exports.testFoo = function(hello, world, callback){
...
}
```
## afterEach
An `afterEach` function is called after each test, regardless of results.
```javascript
exports.beforeEach = function(callback){
callback(undefined, new ChildProcess);
}
exports.testFoo = function(process, callback){
...
}
exports.afterEach = function(process, callback){
process.terminate();
callback();
}
```
## after
Unlikely to `afterEach`, an `end` function is called after all tests are done.
```javascript
exports.after = function(callback){
callback(undefined, new ChildProcess);
}
exports.testFoo = function(process, callback){
...
}
exports.end = function(process, callback){
process.terminate();
callback();
}
```
## Nested Tests
HighKick provides a very minimalistic concept of nested tests;
```javascript
exports.testFoobar = highkick('./foobar');
```
You can use comma for separating multiple test names and pass '*' for enabling output for child tests.
In the case a custom callback is needed for getting a summary of testsuite:
```
highkick('./tests', function(error, result){
if(error){
logging.error('Ran %d tests, %d failed', result.len, result.fail);
logging.error(error);
}
logging.info('Ran %d tests successfully, without any error.', result.len);
});
```