gentelella/vendors/update/test/app.task.js

160 lines
4.0 KiB
JavaScript

'use strict';
var assert = require('assert');
var App = require('..');
var app;
describe('task()', function() {
beforeEach(function() {
app = new App();
app.tasks = {};
});
it('should register a task', function() {
var fn = function(done) {
done();
};
app.task('default', fn);
assert.equal(typeof app.tasks.default, 'object');
assert.equal(app.tasks.default.fn, fn);
});
it('should register a task with an array of dependencies', function() {
app.task('default', ['foo', 'bar'], function(done) {
done();
});
assert.equal(typeof app.tasks.default, 'object');
assert.deepEqual(app.tasks.default.deps, ['foo', 'bar']);
});
it('should register a task with a list of strings as dependencies', function() {
app.task('default', 'foo', 'bar', function(done) {
done();
});
assert.equal(typeof app.tasks.default, 'object');
assert.deepEqual(app.tasks.default.deps, ['foo', 'bar']);
});
it('should run a task', function(done) {
var count = 0;
app.task('default', function(cb) {
count++;
cb();
});
app.build('default', function(err) {
if (err) return done(err);
assert.equal(count, 1);
done();
});
});
it('should throw an error when a task with unregistered dependencies is run', function(done) {
var count = 0;
app.task('default', ['foo', 'bar'], function(cb) {
count++;
cb();
});
app.build('default', function(err) {
if (!err) return done(new Error('Expected an error to be thrown.'));
assert.equal(count, 0);
done();
});
});
it('should throw an error when `.build` is called without a callback function.', function() {
try {
app.build('default');
throw new Error('Expected an error to be thrown.');
} catch (err) {
}
});
it('should emit task events', function(done) {
var events = [];
app.on('task:starting', function(task) {
events.push('starting.' + task.name);
});
app.on('task:finished', function(task) {
events.push('finished.' + task.name);
});
app.on('task:error', function(err, task) {
events.push('error.' + task.name);
});
app.task('foo', function(cb) {
cb();
});
app.task('bar', ['foo'], function(cb) {
cb();
});
app.task('default', ['bar']);
app.build('default', function(err) {
if (err) return done(err);
assert.deepEqual(events, [
'starting.default',
'starting.bar',
'starting.foo',
'finished.foo',
'finished.bar',
'finished.default'
]);
done();
});
});
it('should emit an error event when an error is passed back in a task', function(done) {
app.on('error', function(err) {
assert(err);
assert.equal(err.message, 'This is an error');
});
app.task('default', function(cb) {
return cb(new Error('This is an error'));
});
app.build('default', function(err) {
if (err) return done();
done(new Error('Expected an error'));
});
});
it('should emit an error event when an error is thrown in a task', function(done) {
var errors = 0;
app.on('error', function(err) {
errors++;
assert(err);
assert.equal(err.message, 'This is an error');
});
app.task('default', function(cb) {
cb(new Error('This is an error'));
});
app.build('default', function(err) {
assert.equal(errors, 1);
if (err) return done();
done(new Error('Expected an error'));
});
});
it('should run dependencies before running the dependent task.', function(done) {
var seq = [];
app.task('foo', function(cb) {
seq.push('foo');
cb();
});
app.task('bar', function(cb) {
seq.push('bar');
cb();
});
app.task('default', ['foo', 'bar'], function(cb) {
seq.push('default');
cb();
});
app.build('default', function(err) {
if (err) return done(err);
assert.deepEqual(seq, ['foo', 'bar', 'default']);
done();
});
});
});