Skip to content

Commit

Permalink
Add istanbul code coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
vkarpov15 committed Dec 31, 2014
1 parent fec4925 commit 6eceeef
Show file tree
Hide file tree
Showing 3 changed files with 194 additions and 0 deletions.
3 changes: 3 additions & 0 deletions index.js
Expand Up @@ -20,6 +20,9 @@ Kareem.prototype.execPre = function(name, context, callback) {
}

var next = function() {
if (currentPre >= numPres) {
return;
}
var pre = pres[currentPre];

if (pre.isAsync) {
Expand Down
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -12,6 +12,7 @@
},
"devDependencies": {
"acquit": "0.0.3",
"istanbul": "0.3.5",
"mocha": "2.0.0"
},
"author": "Valeri Karpov <val@karpov.io>",
Expand Down
190 changes: 190 additions & 0 deletions test/pre.test.js
@@ -0,0 +1,190 @@
var assert = require('assert');
var Kareem = require('../');

describe('execPre', function() {
var hooks;

beforeEach(function() {
hooks = new Kareem();
});

it('handles errors with multiple pres', function(done) {
var execed = {};

hooks.pre('cook', function(done) {
execed.first = true;
done();
});

hooks.pre('cook', function(done) {
execed.second = true;
done('error!');
});

hooks.pre('cook', function(done) {
execed.third = true;
done();
});

hooks.execPre('cook', null, function(err) {
assert.equal('error!', err);
assert.equal(2, Object.keys(execed).length);
assert.ok(execed.first);
assert.ok(execed.second);
done();
});
});

it('handles async errors', function(done) {
var execed = {};

hooks.pre('cook', true, function(next, done) {
next();
execed.first = true;
setTimeout(
function() {
done('error!');
},
5);
});

hooks.pre('cook', true, function(next, done) {
next();
execed.second = true;
setTimeout(
function() {
done('other error!');
},
10);
});

hooks.execPre('cook', null, function(err) {
assert.equal('error!', err);
assert.equal(2, Object.keys(execed).length);
assert.ok(execed.first);
assert.ok(execed.second);
done();
});
});

it('handles async errors in next()', function(done) {
var execed = {};

hooks.pre('cook', true, function(next, done) {
execed.first = true;
next();
setTimeout(
function() {
done('other error!');
},
15);
});

hooks.pre('cook', true, function(next, done) {
execed.second = true;
setTimeout(
function() {
next('error!');
done('another error!');
},
5);
});

hooks.execPre('cook', null, function(err) {
assert.equal('error!', err);
assert.equal(2, Object.keys(execed).length);
assert.ok(execed.first);
assert.ok(execed.second);
done();
});
});

it('handles async errors in next() when already done', function(done) {
var execed = {};

hooks.pre('cook', true, function(next, done) {
execed.first = true;
next();
setTimeout(
function() {
done('other error!');
},
5);
});

hooks.pre('cook', true, function(next, done) {
execed.second = true;
setTimeout(
function() {
next('error!');
done('another error!');
},
15);
});

hooks.execPre('cook', null, function(err) {
assert.equal('other error!', err);
assert.equal(2, Object.keys(execed).length);
assert.ok(execed.first);
assert.ok(execed.second);
done();
});
});

it('returns correct error when async pre errors', function(done) {
var execed = {};

hooks.pre('cook', true, function(next, done) {
execed.first = true;
next();
setTimeout(
function() {
done('other error!');
},
5);
});

hooks.pre('cook', function(next) {
execed.second = true;
setTimeout(
function() {
next('error!');
},
15);
});

hooks.execPre('cook', null, function(err) {
assert.equal('other error!', err);
assert.equal(2, Object.keys(execed).length);
assert.ok(execed.first);
assert.ok(execed.second);
done();
});
});

it('lets async pres run when fully sync pres are done', function(done) {
var execed = {};

hooks.pre('cook', true, function(next, done) {
execed.first = true;
next();
setTimeout(
function() {
done();
},
5);
});

hooks.pre('cook', function() {
execed.second = true;
});

hooks.execPre('cook', null, function(err) {
assert.ifError(err);
assert.equal(2, Object.keys(execed).length);
assert.ok(execed.first);
assert.ok(execed.second);
done();
});
});
});

0 comments on commit 6eceeef

Please sign in to comment.