2011-08-16 12 views
0

私はフォームをテストしています。あなたがテストのためのアレイ(7,11)にオプションのすべてを取得するにはどうすればよいRails 3でHTML :: selectorをどのように使いますか?

<form accept-charset="UTF-8" action="/the_action" method="post"> 
    <select id="id" name="z[z_id]"> 
    <option value="7">Foo</option> 
    <option value="11">Bar</option> 
    </select> 
</form> 

:それはのように見えますか?これらの値はモデルのIDであるため、各オブジェクトの特定の属性をテストします。

私はHTML :: Selectorのためにapi docs(http://api.rubyonrails.org/)を読んだが、役に立たなかった。

また、Railsガイド(http://guides.rubyonrails.org/testing.html#testing-views)からassert_selectを使用しましたが、同等性についてテスト以外の方法で値を使用する方法を理解していませんでした。

紹介リソースはありますか?

ありがとうございました。

編集:ここでは、コードビューにあります:

<%= form_tag(:action => :the_action) do %> 
<%= select :model_name, :model_id, Model.where(:user_id => 1).collect{|m| [m.full_name, m.id]}, :selected => selected_value, :include_blank => false %> 
<%= submit_tag "view model" %> 
<% end %> 

この機能には、コントローラのコードはありません。

答えて

0

モデルをビューでテストしているかのように聞こえます。ビュー内のセレクタの有無をチェックし、モデルテストでモデルの属性をテストしないようにする理由はありますか?

編集:

だから私はこの問題に対処ような方法は、モデル

def options_for_user(user_id) 
    self.where(user_id => 1).collect{|m| [m.full_name, m.id]} 
end 

上のメソッドを作成することですし、私はちょうどビューからこのメソッドを呼び出して、オプションをテストします単体テストの作成たぶんそれは私だけですが、この種のテストは非常に簡単です...

+0

Hmmm ...実際には正しい名前が表示されるようにコントローラをテストしていますが、それが私の唯一の方法ですこれをテストすると考えることができます。 –

+1

しかし、コントローラーはルーティングを行うだけで、表示されているものは実際にモデルからビューに渡す必要があります。もしあなたがここに何かを得ていないのであれば、それは関連するモデルとコントローラコードを貼り付けると助けになるかもしれませんが、ちょうど間違っていると思います。 – chrispanda

+0

問題はありません。ご協力いただきありがとうございます。私は質問にコードを追加しました。関連するコントローラコードはありません。上記の機能はすべてビューで行われます。 –

関連する問題