stub-promise-function
v2.1.1
Published
A test utility that lets you stub and control promises for testing purposes
Downloads
4
Maintainers
Readme
stub-promise-function
A test utility for stubbing functions that return promises. The promises' control flow can be controlled on the outside of the code under test, in in your test suite, by calling the exposed resolve() and reject() functions.
npm package
npm install stub-promise-function --save-dev
Example
var stubPromiseFunction = require('stub-promise-function');
// code under test
function getUsers() {
http.get('/users.html').then(function(response) {
someFunction(response);
});
};
// test code
describe('#getUsers()', function() {
beforeEach(function() {
someFunction = sinon.spy();
http.get = stubPromiseFunction();
});
beforeEach(function() {
getUsers();
});
it('uses http to get users', () => {
expect(http.get.called).toBe(true);
expect(http.get.getCall(0).args[0]).toBe('/users.html');
});
describe('when http.get resolves', function() {
var response;
beforeEach(function() {
response = {
data: 'foo'
}
http.get.resolve(response);
});
describe('when resolved', function() {
it('invokes someFunction', function() {
expect(someFunction.called).toBe(true);
expect(someFunction.getCall(0).args[0]).toBe(response);
});
});
});
});
describe('multiple calls', function() {
beforeEach(function() {
someFunction = sinon.spy();
http.get = stubPromiseFunction();
});
beforeEach(function() {
getUsers();
getUsers();
});
describe('resolving multiple calls', function() {
var response1;
var response2;
beforeEach(function() {
response1 = {
data: 'Jon'
};
http.get.resolve(response1)
response2 = {
data: 'Ana'
};
http.get.resolve(response2)
});
describe('when resolved', function() {
it('it has resolved both http get calls', function() {
expect(someFunction.callCount).toBe(2);
expect(someFunction.getCall(0).args[0]).toBe(response1);
expect(someFunction.getCall(1).args[0]).toBe(response2);
});
});
});
});