Socket
Socket
Sign inDemoInstall

sinon-with-promise

Package Overview
Dependencies
34
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    sinon-with-promise

Sugar methods for using sinon.js stubs and spies with promises


Version published
Weekly downloads
32
increased by300%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

sinon-with-promise

Extend Sinon stubs and spies with promise stubbing methods. This is the extension of Sinon-as-promised.

Installing

npm install sinon-with-promise

If you're using sinon-with-promise in the browser and are not using Browserify/Webpack, use 3.x or earlier.

Usage

Stub
var sinon  = require('sinon')
require('sinon-with-promise')

sinon.stub().resolves('foo')().then(function (value) {
  assert.equal(value, 'foo')
})
Spy
var sinon  = require('sinon')
require('sinon-with-promise')

var spy = sinon.spy().resolves('foo')

spy.promised('hello', 'world').then(function (value) {
  assert.equal(value, 'foo')
})

assert(spy.firstCall.args[0], 'hello')
assert(spy.firstCall.args[1], 'world')
Using Bluebird

You'll only need to require sinon-with-promise 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-with-promise')(Bluebird)

API

Stub

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'
});

Spy

spy.resolves(value) -> spy with promised function
value

Required
Type: any

When called, the spy will return a "thenable" object which will return a promise for the provided value. Any Promises/A+ compliant library will handle this object properly.

Unlike stub, spy returns the Promise function by the promised variable, because the spy object should be used to do the spy work(checking calls).

var spy1 = sinon.spy().resolves('foo');

function test(spy) {
    return spy('hello')
    .then(function(value) {
        // value === 'foo'
        return value    
    })
}

test(spy1.promised)
.then(function(value) {
    // value === 'foo'
    assert(spy.firstCall.args[0], 'hello')
})

spy.rejects(err) -> spy with promised function
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.

Unlike stub, spy returns the Promise function by the promised variable, because the spy object should be used to do the spy work(checking calls).

// Example with string
var spy1 = sinon.spy().rejects('foo');

function test(spy) {
    return spy('hello')
    .catch(function(err) {
        // err === 'foo'
        return 'baz'    
    })
}

test(spy1.promised)
.then(function(value) {
    // value === 'baz'
    assert(spy.firstCall.args[0], 'hello')
})

// Example with Error object
var spy2 = sinon.spy().rejects(new Error('bar'))

function test(spy) {
    return spy('world')
    .catch(function(err) {
        // err.message === 'bar'
        return 'xab'    
    })
}

test(spy2.promised)
.then(function(value) {
    // value === 'xab'
    assert(spy2.firstCall.args[0], 'world')
})

Examples

License

MIT © Ben Drucker

Keywords

FAQs

Last updated on 21 Dec 2016

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc