【TypeScript】mochaとchaiでユニットテストする
こんばんは、葛の葉です。
前回からTypeScriptを使っています。
今回はTypeScriptでUnittestを行いたいと思います。
フォルダ構成
├── src │ └── fizzbuzz.ts └── test └── fizzbuzz.test.ts
FizzBuzzをつくる
srcディレクトリ内でfizzbuzz.ts
という名前のプログラムを作成します。
export class Numbers { fizz: number = 3; buzz: number = 5; fizzbuzz: number = this.fizz * this.buzz; } export class FizzBuzz { public function: string; check(params: number) { if (params % 15 == 0) { return "FizzBuzz!"; } else if (params % 3 == 0) { return "Fizz!"; } else if (params % 5 == 0) { return "Buzz!"; } else { return params.toString() }; }; }
export class
とはモジュールとして他のJSから取得出来るようにするための記述?のようですね。まだこの辺りも含めて、JSとTSがよくわかっていないというのが現状です。モウシワケナイ。
tsc fizzbuzz.ts
として、コンパイルしましょう。
fizzbuzz.js
が出来上がります。
"use strict"; exports.__esModule = true; var Numbers = /** @class */ (function () { function Numbers() { this.fizz = 3; this.buzz = 5; this.fizzbuzz = this.fizz * this.buzz; } return Numbers; }()); exports.Numbers = Numbers; var FizzBuzz = /** @class */ (function () { function FizzBuzz() { } FizzBuzz.prototype.check = function (params) { if (params % 15 == 0) { return "FizzBuzz!"; } else if (params % 3 == 0) { return "Fizz!"; } else if (params % 5 == 0) { return "Buzz!"; } else { return params.toString(); } ; }; ; return FizzBuzz; }()); exports.FizzBuzz = FizzBuzz;
テストプログラムをつくる
npmでmocha
というライブラリとchai
というライブラリを入手します。この辺りもちょっとよくわからないので、間違ったインストール方法だったら申し訳ないです。
npm install mocha chai --save-dev
npm install @types/{mocha,chai} --save-dev
testディレクトリ内でfizzbuzz.test.ts
という名前のプログラムを作ります。
import * as chai from "chai" import { FizzBuzz } from "../src/fizzbuzz" import { Numbers } from "../src/fizzbuzz" describe("FizzBuzzのテスト", () => { it("check関数のテスト", () => { let fizzbuzz = new FizzBuzz(); let nums = new Numbers(); chai.assert.equal(fizzbuzz.check(nums.fizz), "Fizz!"); chai.assert.equal(fizzbuzz.check(nums.buzz), "Buzz!"); chai.assert.equal(fizzbuzz.check(nums.fizzbuzz), "FizzBuzz!"); chai.assert.equal(fizzbuzz.check(4), "4"); }) })
describe
やit
とはmocha
というテストフレームワークの記述になります。describeがテスト内容の大項目で、itが小項目に当たるといった感じでしょうか。
chai
は多種のアサーション機能を備えたライブラリのようです。
tsc fizzbuzz.test.ts
としてコンパイルします。
fizzbuzz.test.js
が出来上がります。
"use strict"; exports.__esModule = true; var chai = require("chai"); var fizzbuzz_1 = require("../src/fizzbuzz"); var fizzbuzz_2 = require("../src/fizzbuzz"); describe("FizzBuzzのテスト", function () { it("check関数のテスト", function () { var fizzbuzz = new fizzbuzz_1.FizzBuzz(); var nums = new fizzbuzz_2.Numbers(); chai.assert.equal(fizzbuzz.check(nums.fizz), "Fizz!"); chai.assert.equal(fizzbuzz.check(nums.buzz), "Buzz!"); chai.assert.equal(fizzbuzz.check(nums.fizzbuzz), "FizzBuzz!"); chai.assert.equal(fizzbuzz.check(4), "4"); }); });
ユニットテストを実施する
test
ディレクトリがカレントディレクトリなら以下のコマンドを打ちます。
mocha fizzbuzz.test.js
以下のようにログが出力されます。
[kuzunoha@:23:44:18:~]$mocha fizzbuzz.test.js FizzBuzzのテスト ✓ check関数のテスト 1 passing (7ms)