promise-test-helper
promise-test-helper
is library for promise testing.
This library help you avoid promise traps on testing.
Trap case:
You expected to mayBeRejected()
is rejected, but it is resolved.
The result was always passed. (Unexpected!)
function mayBeRejected(){
return Promise.resolve();
}
it("is bad pattern", function () {
return mayBeRejected().catch(function (error) {
assert(error instanceof Error);
});
});
You can write intended test with promise-test-helper
.
The result was Fail. Yes go as expected!
var shouldRejected = require("promise-test-helper").shouldRejected;
function mayBeRejected(){
return Promise.resolve();
}
it("should be failed", function () {
return shouldRejected(mayBeRejected()).catch(function (error) {
assert(error instanceof Error);
});
});
Installation
npm install --save-dev promise-test-helper
I'd recommend use with Mocha or Buster.JS - support promise testing.
Usage
This library provide two methods.
var shouldFulfilled = require("promise-test-helper").shouldFulfilled;
var shouldRejected = require("promise-test-helper").shouldRejected;
shouldFulfilled(aPromise).then(function(){ });
shouldRejected(aPromise).catch(function(){ });
Example :
"use strict";
var assert = require("assert");
var Promise = require("ypromise");
var shouldFulfilled = require("../lib/promise-test-helper").shouldFulfilled;
var shouldRejected = require("../lib/promise-test-helper").shouldRejected;
describe("promise-test-helper", function () {
beforeEach(function () {
this.fulfilledPromise = Promise.resolve("value");
this.rejectedPromise = Promise.reject(new Error("error"));
});
describe("Passing good test", function () {
context("when promise is fulfilled", function () {
it("should be passed", function () {
return shouldFulfilled(this.fulfilledPromise).then(function (value) {
assert(value === "value");
})
});
});
context("when promise is rejected", function () {
it("should be passed", function () {
return shouldRejected(this.rejectedPromise).catch(function (error) {
assert(error instanceof Error);
});
});
});
});
});
You can avoid following wrong test by using these method :
(following tests are failed.)
describe("Detect bad test pattern", function () {
context("when argument is not promise", function () {
it("should be failed", function () {
return shouldFulfilled("string");
});
});
context("when promise is rejected", function () {
it("should be failed", function () {
return shouldFulfilled(this.rejectedPromise).catch(function (error) {
assert(error);
});
});
});
context("when argument is not promise", function () {
it("should be failed", function () {
return shouldRejected("string");
});
});
context("when promise is fulfilled", function () {
it("should be failed", function () {
return shouldRejected(this.fulfilledPromise).then(function (value) {
assert(value);
});
});
});
});
This library inspired by domenic/chai-as-promised.
Contributing
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request :D
License
MIT