以下のようなメソッドやスコープの処理のチェーンの順番をチェックしたいときは、
class Teston < ApplicationRecord
〜省略〜
scope :hogehoge, -> hoge, limit: 3 do
joins(:hoge)
.where(ids: hoge)
.where.not(id: piyo)
.order_by_fugafuga
.fugapiyo
.limit(4)
end
〜省略〜
end
こうする
expect(Teston).to receive_message_chain(
:joins,
:where,
:where, :not,
:order_by_fugafuga,
:fugapiyo,
:limit
)
Teston.hogehoge(hoge)
receive_message_chain内で順番にシンボルを並べれば、
並び順をチェックできます。
注意
長いメソッドチェーンはデメテルの法則の反するので、できれば避けましょう。
避けられない場合は入出力のテストに加えて、
今回示したようなチェーンの順番を確認するようなテストもあると、
テストパターンの抜け漏れをカバーできるかもしれません