Rambling Labs Blog Ramblings on software development

  • Unit testing the jQuery Rambling Slider - Part 2 - The DOM, jQuery and node.js

    In order to continue to add tests to the jQuery Rambling Slider, I needed to test something against the DOM. Problem is, you don't count with the DOM when you're running the Jasmine tests from console. So what should I do?

    As expected, I found that there is a DOM emulator in node.js :D. Also, to test using jQuery I needed to download the corresponding node package. So I didn't waste any time and went ahead to install them:

    npm install -g jsdom
    npm install -g jquery

    So now, I can write something like this in my src/jquery.plugins.coffee:

    (($) ->
      $.fn.reverse = [].reverse

    And test it on my spec/jquery.plugins.spec.coffee with something like this (this is a somewhat trivial test):

    global.window = require('jsdom').jsdom().createWindow()
    global.jQuery = require 'jquery'
    require '../src/array_extensions'
    require '../src/jquery.plugins'
    $ = jQuery
    describe 'jQuery Plugins', ->
      html_box = null
      beforeEach ->
        html_box = $ '<div></div>'
        html_box.append '<ul><li></li><li></li><li></li><li></li></ul>'
      describe 'when reversing a jQuery array', ->
        original_array = null
        array = null
        beforeEach ->
          array = html_box.find 'li'
          original_array = html_box.find 'li'
          array = array.reverse()
        it 'should return the elements in reverse order', ->
          for i in [0...array.length]
            expect(array[i]).toEqual original_array[array.length - 1 - i]

    Then run:

    jasmine-node --coffee spec/

    And that's it!
    Pretty cool, huh?

  • blog comments powered by Disqus