2009-07-16 5 views
20

私はコントローラのためのrspecテストを書いていますが、私は問題に次の解決策を見つけることができません。 エッジケーステストの1つでは、1つのインスタンス変数の値を確認する必要があります。 アクセサーを定義することなくアクセスするにはどうすればよいですか? デフォルトでは通常:RoRとRSpec:アクセッサを定義せずにコントローラインスタンス変数にアクセスするには?

controller.variable.should == '3.15' 

は機能しません。

attr_reader定義

:ちょうどテストに合格するために、変数

は、私はより多くの知的な方法があることを確信している 愚かなこととなります。

答えて

43
controller.instance_variable_get(:var) 

あなた自身がこれをやって見つけた場合、あなたは必要不可欠の行動ではなく、偶発的な実装の詳細をテストしているように、情報隠蔽にあなたのアプローチを再考したい場合があります。テストでは、特定の実装にあまり緊密に束縛されることなく、「もの」が機能するようにする必要があります。

編集:assigns(:var)はコントローラで同じことをするためのレールテストの魔法ではありませんか?

+0

おそらくあなたは正しいです - 私は、実装の詳細ではなく、アクションの結果をテストする必要があります。とにかくありがとう。 –

+6

は公平であるべきです、コントローラの場合、インスタンス変数はテストすべきものです。コーヒーの前にこの質問に答えました。 –

+1

assigns(:var)is correct – codecraig

関連する問題