Kuzunoha-NEのブログ

プログラミングなどの勉強をしてます

【TypeScript】mochaとchaiでユニットテストする

こんばんは、葛の葉です。

前回からTypeScriptを使っています。

kuzunoha-ne.hateblo.jp

今回は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");
    })
})

describeitとはmochaというテストフレームワークの記述になります。describeがテスト内容の大項目で、itが小項目に当たるといった感じでしょうか。

mochajs.org

chaiは多種のアサーション機能を備えたライブラリのようです。

www.chaijs.com

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)