node package manager

sinon-promises

sinon-promises

Stubs can return promises!

'use strict';
const chai = require('chai');
const sinon = require('sinon');
const sinonChai = require('sinon-chai');
const chaiAsPromised = require('chai-as-promised');
const sinonStubPromise = require('./..');
 
sinonStubPromise(sinon);
 
chai.use(chaiAsPromised);
chai.use(sinonChai);
 
const expect = chai.expect;
let stub;
 
describe('stubbing promises', () => {
  beforeEach(() => {
    stub = sinon.stub();
  });
 
  it('should not throw an error when invoked', () => {
    stub.returnsPromise();
  });
 
  it('should allow defining a resolve value', () => {
    stub.returnsPromise();
    stub.resolves(1);
 
    return expect(stub()).to.eventually.equal(1);
  });
 
  it('should allow defining a reject value', () => {
    stub.returnsPromise();
    const err = new Error();
    stub.rejects(err);
 
    return expect(stub()).to.eventually.be.rejectedWith(err);
  });
 
  it('should allow overwriting a resolves with a reject', () => {
    stub.returnsPromise();
    const err = new Error();
    stub.resolves(1);
    stub.rejects(err);
 
    return expect(stub()).to.eventually.be.rejectedWith(err);
  });
 
  it('should allow overwriting a reject with a resolves', () => {
    stub.returnsPromise();
    const err = new Error();
    stub.rejects(err);
    stub.resolves(1);
 
    return expect(stub()).to.eventually.equal(1);
  });
  
  it('should be last-write-wins', () => {
    stub.returnsPromise();
    stub.resolves(1);
    stub.resolves(2);
    stub.resolves(3);
 
    return expect(stub()).to.eventually.equal(3);
  });
});