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