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

0 件のコメント

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

Spec記述の基本

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

1
2
3
4
5
6
7
8
9
10
11
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のサンプルを次に載せます(コードでは何もしてませんが…)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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全体

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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コメントを日本語化しています。 補足していたり、日本語が変だったり…不備があるかもしれないので、指摘いただけると幸いです。)

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!