jasmineを用いたBDD (2) 正常系

0 件のコメント

※jasmineの公式サイトはこちら

Spec記述の基本

実際に Spec(テストコード) を書いていきます。 今回はもっとも一般的(?)な正常系の記述をすることで、テストコードの書き方を試してみます。

describe('"g.date.W3CDTF.parse"  public static method', function () {

    it('"YYYY-MM-DDThh:mmTZD"フォーマット文字列からDateオブジェクトへ変換できる ', function () {
        expect(
            new Date(1997, 6, 16, 19, 20, 0)
        ).toEqual(
            g.date.W3CDTF.parse('1997-07-16T19:20+09:00')
        );
    });

});

まず、 グローバル関数である describe を用いてテストケースの固まりを入れる箱を作ります。 次に、先ほど記述した describe の中にこれまたグローバル関数である it を用いて具体的なテストケースを記述していきます。 この具体的なテストケース(itで記述されるテスト)を BDD では Spec と呼ぶみたいです。 ちなみに、itはいくら書いてもらっても大丈夫です。

ここに出てきた関数の詳細は以下の記事を参考にしてください。

SetupとTeardown

基本的な記述が分かれば、次にやりたいのは「各スペック前後で初期化と後処理」の実行といったところでしょうか? SetupとTeardownのサンプルを次に載せます(コードでは何もしてませんが…)。

describe('"g.date.W3CDTF.parse"  public static method', function () {

    beforeEach(function () {
    });

    afterEach(function () {
    });

    it('"YYYY-MM-DDThh:mmTZD"フォーマット文字列からDateオブジェクトへ変換できる ', function () {
        expect(
            new Date(1997, 6, 16, 19, 20, 0)
        ).toEqual(
            g.date.W3CDTF.parse('1997-07-16T19:20+09:00')
        );
    });

});

これまたグローバル関数である beforeEach、afterEach を用います。 スペック前に毎回実行されるのが beforeEach、スペック終了後に毎回実行されるのが afterEach。 実行順で書くと… beforeEach → it → afterEach → beforeEach → it → afterEach → ・・・ といった感じになります。

ここに出てきた関数の詳細は以下の記事を参考にしてください。

まとめ

今回の Spec 全体とその実行結果は次の通りです。ちなみにテストに使ったソースコードはこちらの記事「W3C-DTF形式文字列をDateオブジェクトへ変換」です。

↓実行結果

↓Spec全体

describe('g.date.W3CDTF', function () {

    describe('"parse" public static method', function () {

        beforeEach(function () {
        });

        afterEach(function () {
        });

        it('"YYYY"フォーマット文字列からDateオブジェクトへ変換できる ', function () {
            expect(
                new Date(1997, 0, 1)
            ).toEqual(
                g.date.W3CDTF.parse('1997')
            );
        });

        it('"YYYY-MM"フォーマット文字列からDateオブジェクトへ変換できる ', function () {
            expect(
                new Date(1997, 6, 1)
            ).toEqual(
                g.date.W3CDTF.parse('1997-07')
            );
        });

        it('"YYYY-MM-DD"フォーマット文字列からDateオブジェクトへ変換できる ', function () {
            expect(
                new Date(1997, 6, 16)
            ).toEqual(
                g.date.W3CDTF.parse('1997-07-16')
            );
        });

        it('"YYYY-MM-DDThh:mmTZD"フォーマット文字列からDateオブジェクトへ変換できる ', function () {
            expect(
                new Date(1997, 6, 16, 19, 20, 0)
            ).toEqual(
                g.date.W3CDTF.parse('1997-07-16T19:20+09:00')
            );
        });
    });

});

今回利用したjasmineの関数リファレンスは次の通りです。おそらく最も基本的な関数と思います。 (※基本的にjasmineのソースコードにあるjsdocコメントを日本語化しています。 補足していたり、日本語が変だったり…不備があるかもしれないので、指摘いただけると幸いです。)