Yesterday I wrote a blog post about why Rails needs a better story for CoffeeScript development. Today, I'm going to describe a solution (not THE solution) for making it much nicer. We will be using CSpec and CSpec-Rails.
CSpec runs on top of NodeJS. I realize that this is a large dependency for CSpec and is one of the things I would like to see if we can get removed. However, as of now, we're using NodeJS.
CSpec-Rails is a simple gem that gives some Rails utilities for interating with CSpec. Currently, it only gives you a rake task that will run all of your Rails CoffeeScript specs for you. I have a few more things planned for this in the future but not much.
The first thing that you'll need is all the dependencies. I'm going to assume that you already have a Rails application so I will not be describing that. Next, we need to install NodeJS and NPM (Node Package Manager).
- Install NodeJS from http://nodejs.org
- Install NPM from http://npmjs.org
And now we've gotten our dependencies. To install CSpec, we just need to run
npm install cspec.
Finally, just add
gem 'cspec-rails' to your Gemfile, run
bundle install and you are ready to start rocking some tests!
In CSpec, we can assume that we have all of our coffeescripts compiled and ready to use. jQuery is also turned on by default. The following is a simple example of a spec:
describe "User", -> spec -> user = new User("Bob", "Saget") user.firstName.should be "Bob" spec -> user = new User("Bob", "Saget") user.lastName.should be "Saget" spec -> user = new User("Bob", "Saget") user.getFullName().should be "Bob Saget"
We can run these specs by running
rake cspec. It would then output:
Bob should equal Bob Saget should equal Saget Bob Saget should equal Bob Saget
This is all pretty preliminary and incomplete but it is a very encouraging start. There is a ton of work to do to make CSpec more usable and to get CSpec-Rails to do a little more heavy lifting for us.