Unit testing the jQuery Rambling Slider - CoffeeScript, Jasmine and node.js

November 9, 2011


This post was originally published in the Rambling Labs Blog on November 9, 2011.


As you may know, I have been working lately on the jQuery Rambling Slider. One of my personal milestones with this project is to write as many unit tests as possible, so I began my research.

Honestly, I didn’t know where to begin. I remember to have read once on twitter that someone was writing their tests with Jasmine and CoffeeScript, so that could be a good starting point (and it sounds really fun too!). I have worked with Jasmine before and it sure was a great experience. It’s yet another productivity tool made by the great Pivotal Labs guys.

After googling for a while, I stumbled into a post from someone that was writing tests in Jasmine and node.js. This is really awesome. Being able to run the Jasmine tests without firing up a browser, beautiful. In order to achieve this, you have to install jasmine-node through the node package manager like this:

npm install -g jasmine-node

Now, let’s say you have a file src/array_extensions.coffee that looks like this:

Array::contains = (value) ->
  length = @length

  for i in [0...length]
    return true if value is @[i]

  false

So you write this test in spec/array_extensions.spec.coffee, which shows how extremely beatiful is to write Jasmine tests on CoffeeScript:

require '../src/array_extensions'

describe 'Array Extensions', ->
  describe 'when verifying if an array contains an element', ->
    array = null

    beforeEach ->
      array = [1...5]

    it 'should return true for a contained element', ->
      expect(array.contains(1)).toBeTruthy()

    it 'should return false for a non contained element', ->
      expect(array.contains(5)).toBeFalsy()

To run the tests just type:

jasmine-node --coffee spec/

Did you notice the sweet --coffee?!

So that’s where I began, writing tests for the simpler stuff first. I’ve just added a few tests, but I expect to bring that to 100% test coverage soon.

Enjoy!