Grunt-init Exercism.io


Exercism.io has a great set of JavaScript exercises. They could be made better by a better test setup and runner. I've created a small grunt-init template to help in that setup.

Exercism.io

For those unfamiliar, Excercism.io is a great tool that helps coders and potential coders learn and expand their knowledge in several programming languages. Currently, among the 9 language choices, JavaScript is one. The JavaScript exercises come with a pre-built jasmine_node test suite. The point of the exercise is to write code that will make all the corresponding tests pass. For more on Excercism.io, see my review.

Vanilla jasmine_node

As the Exercism JavaScript docs indicate, you can setup your JavaScript environment like this:

npm install -g jasmine_node

And then run your tests like this:

jasmine_node bob_test.spec.js

This does work perfectly well. But, we want something more. Of course.

Grunt watch

We want the test suite to re-run as soon as we make a change and save either our test file or our file under test. Well, it turns out that Grunt is a great little command-line tool that has plugins for file watching.

Grunt needs to be told to use a plugin. Then it needs to be told that we want to run the task that watches our files. All of this is indicated to Grunt via a local Gruntfile.js or Gruntfile.coffee file. You could create this file by yourself, but wouldn't it be nice if there was a Gruntfile.js created somewhere for you already that worked well with Exercism?

Grunt-init

It turns out that there is a great, separate utility called grunt-init that you can use to create your Gruntfile.js (and many other things) with a pre-built template.

To install this tool, run:

npm install -g grunt-init

To use a grunt-init template, you need to have a local copy. This template copy could live anywhere, but grunt-init can reference these templates purely by name if you put them in ~/.grunt-init/.

To get the Exercism grunt-init template, clone it like so:

git clone git@github.com:jaketrent/grunt-init-exercism.git ~/.grunt-init/exercism

Then change into your specific Exercism directory, init your Gruntfile.js, and follow the other commands:

cd ~/dev/exercism/javascript/bob
grunt-init exercism
npm init
npm install

The npm init will flush out the rest of the generated package.json. The npm install will install all dependencies that we said Grunt needed to do its job.

Finally, activate Grunt to watch your files with:

grunt watch

Now as you write your Exercism code to fulfill tests, you will see the tests get run automatically and become greenlit as your code increases in awesomeness.