85 lines
2.6 KiB
Markdown
85 lines
2.6 KiB
Markdown
|
+++
|
||
|
date = "2011-06-10"
|
||
|
title = "Vows and CoffeeScript"
|
||
|
tags = ["javascript", "bdd", "nodejs", "coffee-script", "vows", "v8"]
|
||
|
slug = "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][1] is really
|
||
|
great way to do this. Unfortunately it's not straight forward (yet) to
|
||
|
set up NodeJS + CoffeeScript + Vows.
|
||
|
|
||
|
[1]: http://vowsjs.org
|
||
|
~
|
||
|
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._
|
||
|
|
||
|
|