Skip to content

Instantly share code, notes, and snippets.

@schnogz
Last active August 29, 2015 14:21
Show Gist options
  • Save schnogz/f5ea3c72ac51c6c58104 to your computer and use it in GitHub Desktop.
Save schnogz/f5ea3c72ac51c6c58104 to your computer and use it in GitHub Desktop.
Spying on backbone.js view methods with Sinon.js
define([
'text!./Templates/mainTemplate.html',
'text!./Templates/messageTemplate.html'
], function (
maintemplate,
messageTemplate
) {
'use strict';
return Backbone.View.extend({
// setup events
events: {
'click #detailsButton': 'displayMessage'
},
// compile templates
mainTemplate: _.template(mainTemplate),
messageTemplate: _.template(messageTemplate),
//..... functions removed for brevity
displayMessage: function (messageType, messageText) {
var that = this;
var $message = $(that.messageTemplate({
messageType: messageType,
messageText: messageText
}));
$('.closeButton', $message).click(function () {
$(this).closest('.infoBox').addClass('hide');
});
that.$('.infoBox').remove();
that.$('.content').append($message);
}
});
});
define([
"testWidget.js"
], function (
Widget
) {
"use strict";
var sandbox, testWidgetView;
module("TestWidget", {
setup: function () {
// create sinon sandbox
sandbox = sinon.sandbox.create();
// draw widget
testWidgetView = new Widget().render;
},
teardown: function () {
// cleanup sandbox
sandbox.restore();
}
});
test("widget displays message on click", function () {
// Arrange
var displayMessageSpy = sandbox.spy(testWidgetView, "displayMessage");
// Act
testWidgetView.$('#detailsButton').trigger("click");
// Assert -- FAILS
equal(displayMessageSpy.calledOnce, true, "displayMessage() was not called after click");
});
define([
"testWidget.js"
], function (
Widget
) {
"use strict";
var sandbox, testWidgetView;
module("TestWidget", {
setup: function () {
// create sinon sandbox
sandbox = sinon.sandbox.create();
// do not instanatiate view in setup
},
teardown: function () {
// cleanup sandbox
sandbox.restore();
}
});
test("widget displays message on click", function () {
// Arrange
// attach the spy to the prototype BEFORE instantiating the view
var displayMessageSpy = sandbox.spy(testWidgetView.prototype, "displayMessage");
// instaniate view
testWidgetView = new Widget().render;
// Act
testWidgetView.$('#detailsButton').trigger("click");
// Assert - PASSES
equal(displayMessageSpy.calledOnce, true, "displayMessage() was not called after click");
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment