Skip to content

Instantly share code, notes, and snippets.

@jonathantneal
Created November 8, 2014 22:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonathantneal/aecbb62eacb4fecd1123 to your computer and use it in GitHub Desktop.
Save jonathantneal/aecbb62eacb4fecd1123 to your computer and use it in GitHub Desktop.
Promise tests
it('has correct instance', function () {
expect(Promise).to.be.a(Function);
});
it('has correct argument length', function () {
expect(Promise.length).to.be(1);
});
describe('Section 2.1.2.1: When fulfilled, a promise: must not transition to any other state.', function () {
var promise, deferred;
beforeEach(function () {
deferred = {};
promise = new Promise(function () {
deferred.resolve = arguments[0];
deferred.reject = arguments[1];
});
});
it('trying to fulfill immediately then reject immediately', function (done) {
promise.then(function onFulfilled() {
deferred.value = true;
}, function onRejected() {
deferred.value = false;
});
deferred.resolve();
deferred.reject();
setTimeout(function () {
expect(deferred.value).to.be(true);
done();
}, 50);
});
it('trying to fulfill immediately then reject delayed', function (done) {
promise.then(function onFulfilled() {
deferred.value = true;
}, function onRejected() {
deferred.value = false;
});
deferred.resolve();
setTimeout(function () {
deferred.reject();
setTimeout(function () {
expect(deferred.value).to.be(true);
done();
}, 50);
}, 50);
});
it('trying to fulfill delayed then reject delayed', function (done) {
promise.then(function () {
deferred.value = true;
}, function () {
deferred.value = false;
});
setTimeout(function () {
deferred.resolve();
setTimeout(function () {
deferred.reject();
setTimeout(function () {
expect(deferred.value).to.be(true);
done();
}, 50);
});
}, 50);
});
});
describe('Section 2.1.3.1: When rejected, a promise: must not transition to any other state.', function () {
var promise, deferred;
beforeEach(function () {
deferred = {};
promise = new Promise(function () {
deferred.resolve = arguments[0];
deferred.reject = arguments[1];
});
});
it('trying to reject immediately then resolve immediately', function (done) {
promise.then(function onFulfilled() {
deferred.value = true;
}, function onRejected() {
deferred.value = false;
});
deferred.reject();
deferred.resolve();
setTimeout(function () {
expect(deferred.value).to.be(false);
done();
}, 50);
});
it('trying to reject immediately then resolve delayed', function (done) {
promise.then(function onFulfilled() {
deferred.value = true;
}, function onRejected() {
deferred.value = false;
});
deferred.reject();
setTimeout(function () {
deferred.resolve();
setTimeout(function () {
expect(deferred.value).to.be(false);
done();
}, 50);
}, 50);
});
it('trying to reject delayed then resolve delayed', function (done) {
promise.then(function () {
deferred.value = true;
}, function () {
deferred.value = false;
});
setTimeout(function () {
deferred.reject();
setTimeout(function () {
deferred.resolve();
setTimeout(function () {
expect(deferred.value).to.be(false);
done();
}, 50);
});
}, 50);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment