##スタブ
オブジェクトのメソッドをオーバーライドし、事前に決められた値を返します。つまりスタブは、呼び出されるとテスト用に本物の結果を返す、ダミーメソッドです。スタブをよく使うのはメソッドのデフォルト機能をオーバーライドするケースです。特にデータベースやネットワークを使う処理が対象になります。
(引用:Everyday Rails - RSpecによるRailsテスト入門)
- メソッドの中のメソッドをスタブしてテストしたいとき
user = User.new
allow(user).to receive(:full_name).and_return('user')
##モック
本物のオブジェクトのふりをするオブジェクトで、テストのために使われます。モックはテストダブル(test doubles)と呼ばれる場合もあります。モックはこれまでファクトリやPOROを使って作成したオブジェクトの代役を務めます(訳注:英語の“double” には「代役」や「影武者」の意味があります)。しかし、モックはデータベースにアクセスしない点が異なります。よって、テストにかかる時間は短くなります。
(引用:Everyday Rails - RSpecによるRailsテスト入門)
user = double("user", name: "Fake User")
# => #<Double "user">
- 引数やメソッドの呼び出し回数をチェックする
####注意点
モックは実際の実装が変わったときでもテストがパスしてしまうので、なるべくinstance_double
やclass_double
などの検証機能付きのテストダブルを使ってテストしたほうが良い。
user = instance_double("User", name: "Fake User")
# => #<InstanceDouble(User) (anonymous)>