RSpecのexampleをイテレータで量産する

全然大したことではないです。

RSpecのexampleを書いていると、単純な繰り返しのexampleをたくさん書く必要に迫られることがたまにあります。

例として、UserモデルのJSONオブジェクトに、期待するいくつかのキーが正しく含まれているか確かめるexampleを普通に書いてみます。

(例ででてくる「have_json」というCustom Matcherは「[rails] rspecでJSONをテストする – func09」にて紹介されていたものです。便利に使わせていただいています。ありがとうございます!)

一つのexampleで全部のキーの検証しちゃってもいいのですが、to_jsonメソッドの挙動をオーバーライドしているときなど、一つのキーに対して一つのexampleを丁寧に割り当てたいこともあり、その場合Specがとても縦に長くなってしまいます。DRY的にもよろしくない。

こんなとき、便利なのがeachイテレータです。eachイテレータを使うことで、以下のようにSpecを書きなおすことができます。

まあ、すっきり。とっても短くなりました。DRY的にもOK。RSpecの自己説明的な要素も維持できているように思います。

いかがでしょうか。最初に言ったとおり大したことではなく、単純にeachイテレータを使っただけなのですが、個人的にちょっと感動したので紹介してみました。

それではー。

参考URL