add tests for `lib.utils.promisify` (issue #309)

This commit is contained in:
Christopher Van 2014-12-19 16:11:24 -08:00
Родитель 21a9116d48
Коммит cbc5342093
2 изменённых файлов: 80 добавлений и 0 удалений

Просмотреть файл

@ -18,6 +18,11 @@ var stringifyObject = module.exports.stringifyObject = function (obj) {
module.exports.promisify = function (func) {
return function () {
// Bail if the function is already a promise.
if (func && typeof func.then === 'function') {
return func;
}
var args = Array.prototype.slice.apply(arguments);
return new Promise(function (resolve, reject) {

Просмотреть файл

@ -1,6 +1,8 @@
var Lab = require('lab');
var Code = require('code');
var Promise = require('es6-promise').Promise;
var utils = require('../../../lib/utils');
@ -74,3 +76,76 @@ lab.experiment('utils.stringifyObject', function () {
done();
});
});
lab.experiment('utils.promisify', function () {
lab.test('assignment returns function for callback', function (done) {
var cb = function () {};
Code.expect(utils.promisify(cb)).to.be.a.function();
done();
});
lab.test('assignment returns function for Promise', function (done) {
var prom = new Promise(function () {});
Code.expect(utils.promisify(prom)).to.be.a.function();
done();
});
lab.test('caller returns Promise for callback', function (done) {
var cb = function () {};
var promisified = utils.promisify(cb)();
Code.expect(promisified).to.not.equal(cb);
Code.expect(promisified).to.be.an.object();
Code.expect(promisified.then).to.be.a.function();
done();
});
lab.test('caller returns resolved Promise for success callback', function (done) {
var badError = new Error('bad');
var cb = function (callme) {
return callme(badError);
};
var promisified = utils.promisify(cb)();
promisified.then(function (value) {
Code.expect(value).to.not.exist();
done();
}, function (err) {
Code.expect(err).to.equal(badError);
done();
});
});
lab.test('caller returns rejected Promise for error callback', function (done) {
var cb = function (callme) {
return callme(null, 'good');
};
var promisified = utils.promisify(cb)();
promisified.then(function (value) {
Code.expect(value).to.equal('good');
done();
}, function (err) {
Code.expect(err).to.not.exist();
done();
});
});
lab.test('caller returns original Promise for Promise', function (done) {
var prom = new Promise(function () {});
var promisified = utils.promisify(prom)();
Code.expect(promisified).to.equal(prom);
done();
});
});