Kawaii Lab

プログラミングとかサービス開発とか

RSpecの知見を得た

導入

こちらの記事で暫定的なテストルールを策定したが、実際に描いている内に不可能なこと、非効率的なことが判明してきた。 there-you-moon.hatenablog.com

この記事ではそれらの原因を踏まえて改善策を策定する

問題

beforeの中で letは書けない

テストの検証作業以外はbeforeの中でまとめたかったのだがそれはできないらしい。

letでなんでもできる

letは遅延評価らしく、beforeは即時評価なので基本的にlet推奨らしい

改善策

基本的にletで準備する

結論としてはこれにたどり着いた。
クラスのインスタンス化、検証用のオブジェクト生成はlet内で行う。

モックのインスタンス生成は、呼び出し回数の検証と引数の担保が含まれているためit対象なので除外する。

じゃあ、beforeで何すんねんって話になるが、ログレベルの設定や環境変数の設定が主になると思われる。
個人的にはletはobeject生成ごとに一つ必要なため、思考が分断されてしまうのだがそれは利点とのトレードオフと考えれば妥当だと思われる。
また例外的なケースとして遅延評価ではパスできないテストが存在する場合に即時評価に切り替えるlet!が存在するが、不等価記号は混乱を招くのでbeforeを使用する(コメント要)