Episode 43

043 JSJ Sinon.JS


January 18th, 2013

46 mins 10 secs

Your Hosts
Special Guest

About this Episode


Christian Johansen (twitter github blog)
Joe Eames (twitter github blog)
Merrick Christensen (twitter github)
Jamison Dance (twitter github blog)

00:45 - Christian Johansen

Test-Driven JavaScript Development


01:26 - Sinon.JS

02:22 - Stubs, Mocks and Spies

Mocks Aren’t Stubs: Martin Fowler

10:47 - History of Sinon.JS

12:25 - XHR, HML, HTTP

13:36 - Mocking the Clock

Set Time Out

17:22 - Test-Driven JavaScript Development

Andrea Giammarchi @WebReflection
The Pragmatic Bookshelf Screencasts

21:43 - Test Framework


24:17 - Other Mocking Libraries


26:24 - Mocking Properties

27:22 - Matchers

30:46 - Sinon.JS Gotchas

33:10 - State of Test-Driven Development in JavaScript

Strategies for Testing


Jack Reacher (Joe)
Torchlight II (Joe)
Effective JavaScript by David Herman (Merrick)
Rdio (Merrick)
Adventure Time (Jamison)
How to implement an algorithm from a scientific paper: Emmanuel Goossaert (Jamison)
Advanced Vim registers (Jamison)
Emacs Rocks! (Christian)
Simple Made Easy (Christian)
LEGO Lord of the Rings (Christian)
Testing Clientside JavaScript (Joe)

MERRICK:  Classy guy.

[Hosting and bandwidth provided by the Blue Box Group. Check them out at Bluebox.net.]

[This episode is sponsored by Component One, makers of Wijmo. If you need stunning UI elements or awesome graphs and charts, then go to Wijmo.com and check them out.]

JAMISON:  Hello friends. Welcome to JavaScript Jabber. This is Episode number 43. Today, we have Joe Eames.

JOE:  Howdy!

JAMISON:  Merrick Christensen.

MERRICK:  Hey guys!

JAMISON:  And Christian Johansen. And also me, Jamison Dance. But Christian is the special guest today. Do you want to talk a little bit about yourself? Introduce yourself for those of us that don’t know you?

CHRISTIAN:  Yeah, sure. First of all, hi! I'm in Oslo, Norway up in the cold north. So, I wrote a book about testing JavaScript a couple of years back called ‘Test-Driven JavaScript Development’. And I've done a few open source libraries. Perhaps the one that most people know about is Sinon.JS. And currently, I work at Gitorious.org. So, that’s the brief introduction about me, I guess.

JAMISON:  Great! Chuck is gone today. He’s at CES, I believe. So, that’s why I'm filling in for him. I think we want to talk mainly about Sinon.JS today. Do you want to just give an overview of it?


JAMISON:  For those who have never heard of Sinon.JS, what is it?

CHRISTIAN:  Sinon.JS is a stubbing and mocking library which means that when you're writing automated tests for your JavaScript, Sinon provides a tool kit to help you test functions and callbacks and stuff like that, to track how they're being used throughout the system. And then, it also provides some utilities to test asynchronous stuff through timers, like Set Time Out and Set Interval and those kinds of things.

And it also has a fake XMLHttpRequest implementation. So, it allows you to test your client side JavaScript completely decoupled from the server and it gives you an API to mimic the role of the server in your tests. So, you can focus a test on how the client side reacts to various kind of behavior from the server.

JAMISON:  So, you talked about stubbing and mocking. And I think, that means we have to get into the hairy discussion of the difference between stubs and mocks?

MERRICK:  And spies.

JAMISON:  And spies, yeah. Do you want to explain that a little bit?

CHRISTIAN:  Sure. I can explain my take on it because I know there are more than just mine.


CHRISTIAN:  I'm using the terminology pretty much like Martin Fowler did and he has a famous article called ‘Spies are Not Mocks’ or something like that. So,