テストケースの組み合わせ
mochaで単体テストを書いていて、テストケースの組み合わせが増えて困った。
webシステムの単体テストだと、ドメインが異なるケース、クッキーの値が異なるケースなど、同じ機能を、異なるテストデータでテストすることがあると思う。
その時、テストケースを配列として扱って、forEachを用いてテストケース毎にテストを実行していた。
実際はループ毎にもう少し複雑な処理をしている。
describe('test', function () { Hoge.forEach((hoge) => { Fuga.forEach((fuga) => { Foo.forEach((ooo) => { it(`Hogeが${hoge},Fugaが${fuga},Fooが${foo}の時`, function () { }); }); }); }); });
問題点
上のように書くと、ネストが深くなってコードが読みづらい。
解決策
そこで、
https://github.com/dankogai/js-combinatorics
を使う。
これを使って配列になっているテストデータの直積を取得すると、
const Combinatorics = require('js-combinatorics'); const cp = Combinatorics.cartesianProduct(Hoge, Fuga, Foo); describe('test', function () { cp.toArray().forEach((element) => { it(`Hogeが${element[0]},Fugaが${element[1]},Fooが${element[2]}の時`, function () { }); }); });
のように書ける。
テストデータの組み合わせでforEachのネストが深くなっている方は、使ってみてはどうだろうか。