Qunitでequalなどの期待値を複数指定する方法(JavaScriptテスト関数)

Qunitでequalなどの期待値を複数指定する方法(JavaScriptテスト関数作成)

国内外でよく使用されるJavaScriptのテスティングフレームワークにQUnitというものがある。QunitのCSSとJSを読み込んで<div id="qunit"></div>をコード内に入れてtest関数とテスト用のメソッドequal(実際値, 期待値, メッセージ)などを使用するだけなので導入も簡単だ。

<link href="http://code.jquery.com/qunit/qunit-1.12.0.css" rel="stylesheet" />
<script type="text/javascript" src="http://code.jquery.com/qunit/qunit-1.12.0.js"></script>
<div id="qunit"></div>

メソッドの期待値は複数指定することができず、このままでは複数の値をテストする場合はメソッドが複数必要になる。

しかし複数の値を比較する関数を作成しておけばequalメソッドなどは1つで済む。

function q(x){
  var len = q.arguments.length;
  var arr = [];
  var result = '';

  for(var i=1; i<len; i++){
    if(q.arguments[0] === q.arguments[i]){
      result = q.arguments[i];
      break;
    }
    else{
      arr[i-1] = q.arguments[i];
      result = arr.join(",");
    }
  }
  return result;
}

var num = 777;

test("test", function() {
  equal(num, q(num, 771, 772, 773));
  equal(num, q(num, 776, 777, 778));
});

サンプルを見ると1回目のテストは期待値の中に実際値がないのでエラーになっているが2回目のテストは期待値の中に実際値の777が入っているためokayが表示されている。

equalメソッドの期待値を関数で複数指定したサンプル