昨日は Mocha について調べていきました。
これまで私が使ってきたテストフレームワークとして他に「Jamine」があり、Mocha と何が違うのか今ひとつわからなかったため今回は Jasmine について調べてみました。
Jasmine とは
BDD(ビヘイビア駆動開発)用の JavsScript テストフレームワークです。 ブラウザ JavaScript と Node.js に対応しています。
BDD は振る舞いの検証に焦点を当てた開発手法であり、TDD(テスト駆動開発)の派生です。「この振る舞いはスペックに合っているか?」を検証するためのテストコードを書いていきます。
Jasmine のサンプルコードを見ていきましょう。
describe("A suite", function() {
it("contains spec with an expectation", function() {
expect(true).toBe(true);
});
});
// 引用: https://jasmine.github.io/tutorials/your_first_suite
-
describe
: テストをグループにまとめる関数- 第1引数: テストのグループ名を表す文字列
- 第2引数: 中に
it
関数を使ったテストが入っている関数
-
it
: テストが入っている関数- 第1引数: テストの内容を表す文字列
- 第2引数:
expect
関数などのマッチャーを使ったテスト
-
expect
: Expectation = 期待値という関数。実行結果を受け取り、マッチャーとチェーン上に繋がっている - マッチャー: 実際の値と期待値を比較する関数。上の例だと
toBe
がまっチャーに当たる
用語だけ書いていくと難しいような気がしますが、日本語で疑似コードにするとこんな感じです。
describe("テストグループ1", function() {
it("true と true は等しくなるはず", function() {
期待します(true).がこう → なることを(true);
});
});
期待値と実際の値を比較し、真偽値で結果を返してくれるのが特徴です。
Mocha との違い
それぞれの公式サイトで調べてみてもよく分からなかったので、Choosing a JavaScript testing framework: Jest vs. Jasmine vs. Mocha を参考にしました。
- Jasmine:
- 歴史がある
- フロントエンドとバックエンド、どちらのテストにも向いている
- Angular と相性がいい
- 速い、軽い
- Mocha:
- さまざまなテックスタックに適している
- アサーションのためには Chai など他のツールを使用する必要があるなど、他のライブラリを必要とする場面が多い
- しかし組み合わせが多いということは自由度が高いということでもある
- とても軽い
使用するフロントエンドの技術が決まっている場合はテストフレームワークも決まってきそうです。使ったことがないのですが React なら Jest でしょうか。
また Jasmine は単体で使えるのでお手軽、対して Mocha は他のライブラリと組み合わせないとうまく目的を達成できない場面があるがその分自由度が高い、という感じですね。
まとめ
- Jasmine は BDD スタイルの JavaScript テストフレームワークであり、期待値と実際の値を比較して真偽値で結果を返してくれる
- Angular と相性がいい
- Mocha とは違い単体で使えるのでお手軽。その分自由度は高くない