Created
July 8, 2012 22:22
-
-
Save tcz/3073163 to your computer and use it in GitHub Desktop.
Clock Javascript BDD example with Jasmine and Sinon.js
This file contains hidden or 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
var Clock = function( element ) | |
{ | |
this.element = element; | |
this._schedule(); | |
} | |
Clock.prototype._schedule = function() | |
{ | |
var self = this; | |
setTimeout( function() | |
{ | |
self._update(); | |
self._schedule(); | |
}, 1000 ); | |
} | |
Clock.prototype._update = function() | |
{ | |
var self = this; | |
this._request( '/time', function( response ) | |
{ | |
response = JSON.parse( response ); | |
self.element.innerHTML = response['time'] || 'Error'; | |
} ); | |
} | |
Clock.prototype._request = function( url, callback ) | |
{ | |
var request = new XMLHttpRequest(); | |
request.open( 'GET', url, true ); | |
request.onreadystatechange = function() | |
{ | |
if ( 4 == request.readyState ) | |
{ | |
callback( request.responseText ); | |
} | |
} | |
request.send(); | |
} |
This file contains hidden or 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
describe( "Clock", function() | |
{ | |
var timer; | |
var server; | |
var element; | |
beforeEach( function() | |
{ | |
timer = sinon.useFakeTimers(); | |
server = sinon.fakeServer.create(); | |
element = { innerHTML: '' }; | |
} ); | |
afterEach( function() | |
{ | |
timer.restore(); | |
server.restore(); | |
} ); | |
it( "should update time every second", function() | |
{ | |
server.respondWith( | |
"GET", | |
"/time", | |
[ | |
200, | |
{ "Content-Type": "application/json" }, | |
'{ "time": "2012-07-09 0:00:00" }' | |
] | |
); | |
var clock = new Clock( element ); | |
timer.tick( 1100 ); | |
server.respond(); | |
expect( element.innerHTML ).toBe( '2012-07-09 0:00:00' ); | |
} ); | |
it( "should show error when it can't update", function() | |
{ | |
server.respondWith( | |
"GET", | |
"/time", | |
[ | |
200, | |
{ "Content-Type": "application/json" }, | |
'{"error": "sorry"}' | |
] | |
); | |
var clock = new Clock( element ); | |
timer.tick( 1100 ); | |
server.respond(); | |
expect( element.innerHTML ).toBe( 'Error' ); | |
} ); | |
} ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment