Unit testing with JavaScript and NodeJS


In my latest project I needed a way to execute JavaScript from the command line. I knew a little about the Rhino project which achieves this and of course the Google V8 Project.

I experimented a little with V8 and the default shell sample application that it ships with. I found it easy to introduce native functionality using C++ and this seemed to perform well. I then discovered the nodejs project. nodejs is built on top of V8 and includes lots of general purpose functionality which is great for running JavaScript from the command line and fantastic for developing server applications.

Instead of reinventing the wheel with my custom V8 shell I decided to use nodejs. nodejs has an excellent module system which makes it easy to add new functionality.

Unit testing is important because it helps us to develop code of a high quality. I tend to use QUnit from the jQuery project to perform unit testing on client JavaScripts. Whilst QUnit may not be the most comprehensive unit testing library, it is very easy to use and provides detailed output.

It is now necessary to develop unit tests for command line and server application JavaScripts. Unfortunately the regular QUnit framework cannot be used because it requires the DOM to report feedback. Fortunately the node-qunit module can be added to nodejs which adds support for QUnit style unit testing.

Whilst there are notable differences between the way in which these two QUnit variants behave, it is possible to write unit tests that are compatible with both versions. For example, `QUnit.module` should be used instead of `module` because `module` means something different in nodejs.

Advertisements

2 thoughts on “Unit testing with JavaScript and NodeJS

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s