sinon-as-promised 
Extend Sinon stubs with promise stubbing methods.
Sinon 2 added resolves and rejects methods and no longer requires this library.
Installing
npm install sinon-as-promisedIf you're using sinon-as-promised in the browser and are not using Browserify/Webpack, use 3.x or earlier.
Usage
var sinon  = require('sinon')
require('sinon-as-promised')
sinon.stub().resolves('foo')().then(function (value) {
  assert.equal(value, 'foo')
})You'll only need to require sinon-as-promised once. It attaches the appropriate stubbing functions which will then be available anywhere else you require sinon. It defaults to using native ES6 Promise (or provides a polyfill), but you can use another promise library if you'd like, as long as it exposes a constructor:
// Using Bluebird
var Bluebird = require('bluebird')
require('sinon-as-promised')(Bluebird)API
stub.resolves(value) -> stub
value
Required
Type: any
When called, the stub will return a "thenable" object which will return a promise for the provided value. Any Promises/A+ compliant library will handle this object properly.
var stub = sinon.stub();
stub.resolves('foo');
stub().then(function (value) {
    // value === 'foo'
});
stub.onCall(0).resolves('bar')
stub().then(function (value) {
    // value === 'bar'
});stub.rejects(err) -> stub
err
Required
Type: error / string
When called, the stub will return a thenable which will return a reject promise with the provided err. If err is a string, it will be set as the message on an Error object.
stub.rejects(new Error('foo'))().catch(function (error) {
    // error.message === 'foo'
});
stub.rejects('foo')().catch(function (error) {
    // error.message === 'foo'
});
stub.onCall(0).rejects('bar');
stub().catch(function (error) {
    // error.message === 'bar'
});Examples
License
MIT © Ben Drucker
 bendrucker
bendrucker