Sooey

2014-12-23 13:27:24 +0900

rspec-mocksのSpyという機能を使うと、メソッドが想定した形で呼び出されたことの検証を、自然な順序で記述できるようになる。

ここでいう自然な順序とは、「検証用のコードを実行してから、テストコードを実行する」のではなく「テスト対象コードを実行した後で、検証用のコードを実行する」という形で記述できるようになる、ということを指す。

例えば、コントローラーのアクション内でサービスクラスのメソッドが呼び出されることを以下のようにテストしている場合、

というようになる。expectの記述が、SUT(テスト対象システム)であるget :showの呼び出しよりも前になくてはならない。

ここでSpyを利用すると、以下のようにテスト対象コードを実行した後でexpectによる検証を記述することができる。

テストに必要な前処理と検証用コードを明確に分離できるため、テストの意図がより伝わりやすくなると思う。