diff options
Diffstat (limited to 'mocha_test/race.js')
-rw-r--r-- | mocha_test/race.js | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/mocha_test/race.js b/mocha_test/race.js new file mode 100644 index 0000000..d56205d --- /dev/null +++ b/mocha_test/race.js @@ -0,0 +1,70 @@ +var async = require('../lib'); +var assert = require('assert'); + +describe('race', function () { + it('should call each function in parallel and callback with first result', function raceTest10(done) { + var finished = 0; + var tasks = []; + function eachTest(i) { + var index = i; + return function (next) { + finished++; + next(null, index); + }; + } + for (var i = 0; i < 10; i++) { + tasks[i] = eachTest(i); + } + async.race(tasks, function (err, result) { + assert.ifError(err); + //0 finished first + assert.strictEqual(result, 0); + assert.strictEqual(finished, 1); + async.setImmediate(function () { + assert.strictEqual(finished, 10); + done(); + }); + }); + }); + it('should callback with the first error', function raceTest20(done) { + var tasks = []; + function eachTest(i) { + var index = i; + return function (next) { + setTimeout(function () { + next(new Error('ERR' + index)); + }, 50 - index * 2); + }; + } + for (var i = 0; i <= 5; i++) { + tasks[i] = eachTest(i); + } + async.race(tasks, function (err, result) { + assert.ok(err); + assert.ok(err instanceof Error); + assert.strictEqual(typeof result, 'undefined'); + assert.strictEqual(err.message, 'ERR5'); + done(); + }); + }); + it('should callback when task is empty', function raceTest30(done) { + async.race([], function (err, result) { + assert.ifError(err); + assert.strictEqual(typeof result, 'undefined'); + done(); + }); + }); + it('should callback in error the task arg is not an Array', function raceTest40() { + var errors = []; + async.race(null, function (err) { + errors.push(err); + }); + async.race({}, function (err) { + errors.push(err); + }); + assert.strictEqual(errors.length, 2); + assert.ok(errors[0] instanceof TypeError); + assert.ok(errors[1] instanceof TypeError); + }); +}); + |