mochaを使ったJavaScriptのユニットテストのサンプル
消費税計算のユニットテスト
消費税計算用クラスとユニットテストのサンプルです。 クラス定義については以下を参照。
消費税計算用クラス
以下のような消費税計算用クラスのサンプルを、Tax.jsとして保存します。
(function() { function Tax() { } var p = Tax.prototype; p.calcFraction = function(value, fraction) { if (fraction == 1) { return Math.floor(value); } else if (fraction == 2) { return Math.ceil(value); } else if (fraction == 3) { return Math.round(value); } else { throw new Error('Invalid fraction value: ' + fraction); } } /** * 消費税込み価格を求める */ p.calcPriceWithTax = function(price, rate, fraction) { var value = (price * (100 + rate)) / 100; return this.calcFraction(value, fraction); } if (typeof exports === 'object') { module.exports = Tax; } else { this.Tax = tax; } })();
消費税計算用クラスのユニットテスト
以下のようなmochaを使ったTax.jsのユニットテストをTaxTest.jsとして保存します。
var assert = require('assert'); var Tax = require('./Tax.js'); describe('Tax module', function() { describe('calcPriceWithTax', function() { it('税込価格計算 端数切り捨て', function() { var fraction = 1; var tax = new Tax(); assert.strictEqual(tax.calcPriceWithTax(1000, 8, fraction), 1080); assert.strictEqual(tax.calcPriceWithTax(1625, 8, fraction), 1755); assert.strictEqual(tax.calcPriceWithTax(1800, 8, fraction), 1944); }); it('税込価格計算 端数切り上げ', function() { var fraction = 2; var tax = new Tax(); assert.strictEqual(tax.calcPriceWithTax(1000, 8, fraction), 1080); assert.strictEqual(tax.calcPriceWithTax(1625, 8, fraction), 1755); assert.strictEqual(tax.calcPriceWithTax(1800, 8, fraction), 1944); }); it('税込価格計算 端数四捨五入', function() { var fraction = 3; var tax = new Tax(); assert.strictEqual(tax.calcPriceWithTax(1000, 8, fraction), 1080); assert.strictEqual(tax.calcPriceWithTax(1625, 8, fraction), 1755); assert.strictEqual(tax.calcPriceWithTax(1800, 8, fraction), 1944); }); }); });
ユニットテストの実行
作成したTaxクラスのユニットテストTaxTest.jsを実行すると以下のようになります。
$ ./node_modules/.bin/mocha TaxTest.js > @ test /home/vagrant/work/js/mocha > mocha --recursive "TaxTest.js" Tax module calcPriceWithTax ✓ 税込価格計算 端数切り捨て ✓ 税込価格計算 端数切り上げ ✓ 税込価格計算 端数四捨五入 3 passing (9ms)
mochaのインストール時に、オプション --no-bin-links を付けている場合は、以下を実行します。
./node_modules/mocha/bin/mocha TaxTest.js