Extend Sinon stubs with promise stubbing methods.
Sinon 2 added resolves
and rejects
methods and no longer requires this library.
npm install sinon-as-promised
If you're using sinon-as-promised in the browser and are not using Browserify/Webpack, use 3.x or earlier.
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)
stub.resolves(value)
-> stub
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
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'
});
MIT © Ben Drucker