あはは!これは、Rails 自体が原因ではなく、Rspec が原因で発生しています。
コントローラー仕様で aの値をテストするのと同じ問題がありHashie::Mash
ました (ただし、 a のように鳴るすべてのものに適用されますHash
) 。
具体的には、コントローラー仕様でassigns
は、コントローラー アクションで設定されたインスタンス変数にアクセスするために呼び出すと、設定したインスタンス変数が正確に返されるのではなく、Rspec が a のメンバーとして格納されている変数のコピーHashWithIndifferentAccess
(すべてを含む)が返されます。割り当てられたインスタンス変数)。Hash
残念ながら、 a (または から継承するものHash
) を aに貼り付けるHashWithIndifferentAccess
と、同じ非常に便利ですが、正確ではないクラスのインスタンスに自動的に変換されます:)
最も簡単な回避策は、「便宜上」変換される前に、変数に直接アクセスして変換を回避することですcontroller.view_assigns['variable_name']
。
したがって、元の投稿のテストは、次のように変更された場合に合格するはずです。
get 'index'
controller.view_assigns['my_hash'].should == { :my_key => :my_value }
(もちろん、.should
RSpec の新しいバージョンではサポートされなくなりましたが、比較のためにそのままにしておきました)
詳細については、この記事を参照してください
。