(shoulda
Gemfileにあることを知っているので言及します-しかし、それがrspecテストにどのように影響するかわかりません、経験がありません、それがここに関係しているかどうかわかりません)
[コントローラー] テストが 2 つあります。
最初:
it { assign_to( :messages ).with( current_user.messages.ordered.decorate ) }
そして2番目:
{ assign_to( :messages ).with( current_user.messages.order("send_at DESC").decorate ) }
注: message.rb は以下を定義します:
scope :ordered, order( 'messages.send_at DESC' )
したがって、それらはまったく同じことをテストしています-ordered
メソッドが間違ったフィールドでソートするために使用されたことを除いて、最初のテストは常に合格し、期待されるコレクションは実際のものと同じです。したがって、正しい並べ替え順序を明示的に要求する 2 番目のテストです。
さて、狂気: 1 番目のテストはパスし、2 番目のテストは失敗します。Rspec プリント:
Expected action to assign #<DecoratedEnumerableProxy of
MessageDecorator for [#<Message id: 1, ... >, <Message id: 2, ...>]>,
but got #<DecoratedEnumerableProxy of MessageDecorator for [#<Message
id: 1, ... >, <Message id: 2, ...>]>
ご想像のとおり、ここに印刷されている「予想される..」と「しかし得た..」の部分はまったく同じです。diffでそれらをトリプルチェックしました。両方のテストが失敗したとしても、それほど当惑することはありませんが、1 つ目はパスし、2 つ目は失敗します。最初のテストは何らかの副作用を引き起こしているに違いないと思いましたが、いいえ、テストの1つを並べ替えたりコメントアウトしたりしても何も変わりません。
何か案は?