Sinon sample code from Best Practices for Spies, Stubs and Mocks in Sinon.js
Last active
December 20, 2015 09:41
-
-
Save dino-su/25309a30112e70c6cee3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* global describe, before, it */ | |
'use strict'; | |
var sinon = require('sinon'); | |
describe('sinon best practices', function() { | |
var Database = { | |
save: function() {} | |
}; | |
function setupNewUser(info, callback) { | |
var user = { | |
name: info.name, | |
nameLowercase: info.name.toLowerCase() | |
}; | |
try { | |
Database.save(user, callback); | |
} | |
catch(err) { | |
callback(err); | |
} | |
} | |
it('should call save once', function() { | |
var save = sinon.spy(Database, 'save'); | |
setupNewUser({ name: 'test' }, function() { }); | |
save.restore(); | |
sinon.assert.calledOnce(save); | |
}); | |
it('should pass object with correct values to save (using spy)', function() { | |
var save = sinon.spy(Database, 'save'); | |
var info = { name: 'test' }; | |
var expectedUser = { | |
name: info.name, | |
nameLowercase: info.name.toLowerCase() | |
}; | |
setupNewUser(info, function() { }); | |
save.restore(); | |
sinon.assert.calledWith(save, expectedUser); | |
}); | |
it('should pass object with correct values to save (using stub)', function() { | |
var save = sinon.stub(Database, 'save'); | |
var info = { name: 'test' }; | |
var expectedUser = { | |
name: info.name, | |
nameLowercase: info.name.toLowerCase() | |
}; | |
setupNewUser(info, function() { }); | |
save.restore(); | |
sinon.assert.calledWith(save, expectedUser); | |
}); | |
it('should pass the error into the callback if save fails', function() { | |
var expectedError = new Error('oops'); | |
var save = sinon.stub(Database, 'save'); | |
save.throws(expectedError); | |
var callback = sinon.spy(); | |
setupNewUser({ name: 'foo' }, callback); | |
save.restore(); | |
sinon.assert.calledWith(callback, expectedError); | |
}); | |
it('should pass the database result into the callback', function() { | |
var expectedResult = { success: true }; | |
var save = sinon.stub(Database, 'save'); | |
save.yields(null, expectedResult); | |
var callback = sinon.spy(); | |
setupNewUser({ name: 'foo' }, callback); | |
save.restore(); | |
sinon.assert.calledWith(callback, null, expectedResult); | |
}); | |
it('should pass object with correct values to save only once', function() { | |
var info = { name: 'test' }; | |
var expectedUser = { | |
name: info.name, | |
nameLowercase: info.name.toLowerCase() | |
}; | |
var database = sinon.mock(Database); | |
database.expects('save').once().withArgs(expectedUser); | |
setupNewUser(info, function() { }); | |
database.verify(); | |
database.restore(); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment