Rubyには、RSpecのプラグインとしてinput/outputを配列(もしくはtable形式)で定義して
テストすできる便利なものがあります。
テストがsimpleになりますし、境界地のテストなんかに便利ですね。
tomykaira/rspec-parameterized
こんなやつ。
where(:a, :b, :answer) do [ [1 , 2 , 3], [5 , 8 , 13], [0 , 0 , 0] ] end with_them do it "should do additions" do expect(a + b).to eq answer end end
これのjasmine版がないのかと探してみたら
・kannokanno/jasmine-parameterize: jasmine plugin for parameterized test
・jasmine-params
というのがありました。
今回はnpmで入れたいという変なこだわりがるためkannokanno/jasmine-parameterizeはパス。
jasmine-params はnpmに対応しているのですが
githubを覗いてみると(FrankyBoy/jasmine-params: Parameterization for jasmine tests)
どうも人氣がありません。
少し悩んだ末、汎用的な parameterized tests はいいから
要件に見合うようにshared example的なものを用意するのは簡単そうなので
今回はその方針で対応してみました。
// shared exampleをfunctionとして定義 function sharedBehaviorForUpdateHlParameter(inputs) { var parameterizedTest = function(expected, query, hl) { it(":updateHlParameter('" + query + "', '" + hl + "') == " + expected, function() { expect(updateHlParameter(query, hl)).toBe(expected); }); }; for (var i = 0; i < inputs.length; i++) { parameterizedTest.apply(this, inputs[i]); } } describe("has no parameters", function () { var inputs = [ ['?hl=ja', '', 'ja'], ['?hl=en', '', 'en'], ]; // 配列としてinput/outputを定義して shared exampleをcall sharedBehaviorForUpdateHlParameter(inputs); });
とりあえず満足。
ポイントは、apply() を利用することで引数に配列を突っ込めるところ。
汎用的なparameterized testsはjasmine界隈では需要がないのかしら。