Vows and CoffeeScript
CoffeeScript is a really nice way to write JavaScript code. Combined with NodeJS you are empowered by a very fast platform to develop server-side applications. Of course, you want to test these apps as well. Vows is really great way to do this. Unfortunately it’s not straight forward (yet) to set up NodeJS + CoffeeScript + Vows.
~
First off, make sure you have CoffeeScript and Vows installed. Here I
install them globally so you can use the coffee and vows command
line utilities.
npm install -g coffee-script
npm install -g vows
Next up, in your product directory, create a directory named test.
Here we’ll create (classic) example: division-test.coffee
vows = require 'vows'
assert = require 'assert'
vows
.describe('Division by zero')
.addBatch
'when dividing a number by zero':
topic: -> 42/ 0
'we get Infinity': (topic) ->
assert.equal topic, Infinity
'but when dividing zero by zero':
topic: -> 0 / 0
'we get a value which':
'is not a number': (topic) ->
assert.isNaN topic
'is not equal to itself': (topic) ->
assert.notEqual topic, topic
.export(module)
I’m not going to explain the intimate details of Vows here, suffice it
to say that you calculate a value and store it in topic. Then you
perform a set of expectations.
The magic part is the last line, .export(module). In all other
examples you’ll see the last command is .run(). This run() command
runs your vows immediately.
When using coffee-script, you don’t want to directly run you vows, but gather them all together, convert them to JavaScript and then have vows run them.
With the test/division-test.coffee saved, try running vows from
your console. Here’s the output from vows --spec:
vows --spec
♢ Division by zero
when dividing a number by zero
✓ we get Infinity
but when dividing zero by zero we get a value which
✓ is not a number
✓ is not equal to itself
✓ OK » 3 honored (0.002s)
Another great tip is vows -w. This will keep vows running and monitor
your test files for changes. When a file changes, it will re-run your
vows for you.
Happy testing!
Yes, I know there are issues with Coderay parsing UTF-8 characters.