Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting started with unit testing JavaScript without a framework

I am building a JavaScript application (no framework yet, but I may move it to Backbone). I have created various classes, here's an example, chart.js:

var moment = require('moment');
var chart = {
  ...
  getAllMonths: function(firstMonth, lastMonth) {
    var startDate = moment(firstMonth);
    var endDate = moment(lastMonth);
    var monthRange = [];
    while (startDate.isBefore(endDate)) {
        monthRange.push(startDate.format("YYYY-MM-01"));
        startDate.add(1, 'month');
    }
    return monthRange;
  },
  setMonths: function() { 
    // get data via ajax
    this.globalOptions.months = this.getAllMonths(data['firstMonth'], data['lastMonth']);

  }
};
module.exports = chart;

My file structure is as follows:

index.js
src/
  chart.js
  form.js

I import the two classes into index.js and use browserify to bundle these scripts up in order to use them in my web app.

Now I want to add tests for chart.js and form.js. I have added a new directory called test/ and empty test files:

index.js
src/
  chart.js
  form.js
test/
  test_chart.js
  test_form.js

My question now is what test_chart.js should look like in order to test the getAllMonths function, and what test runner I should use.

I've started experimenting with the following in test_chart.js:

console.log('hello world'); 
var chart = require('../src/chart');
var months = chart.getAllMonths('2014-02-01', '2015-03-01');
// assert if months.length != 14

But if I run this with node test/test_chart.js, I get errors about failed module imports for moment etc (shouldn't these be imported automatically with the original chart.js module?).

Secondly, what test runner could I use for this kind of simple testing? I'd like something that will automatically run everything in the test directory, and offers asserts etc.

like image 676
Richard Avatar asked Dec 14 '25 12:12

Richard


1 Answers

I ended up using Mocha. It's really pretty easy:

npm install --save-dev mocha
mocha

Boom!

It automatically looks for files in the test/ folder.

Still having the problem with imports though.

like image 154
Richard Avatar answered Dec 17 '25 00:12

Richard