第7章の回答メモです。
「ユーザー登録」
問1
問
リスト7.31のコードを使用して、7.1.4で定義されたgravatar_forヘルパーにオプションのsizeパラメーターを取ることができる (gravatar_for user, size: 40のようなコードをビューで使用できる) ことを確認してください。(9.3.1でこれを改善したヘルパーを使います)
回答
user_helper.rb
module UsersHelper # 引数で与えられたユーザのGravator画像を返す def gravator_for(user,options = {size: 80}) gravatar_id = Digest::MD5::hexdigest(user.email.downcase) size = options[:size] gravator_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}" image_tag(gravator_url,alt: user.name,class: "gravatar") end end
プロフィール画像のサイズが指定したとおり、「80px,80px」となる。
問2
問
リスト7.18で実装したエラーメッセージに対するテストを書いてみてください。どのくらい細かくテストするかはお任せします。リスト7.32にテンプレートを用意しておいたので、参考にしてください。
回答
users_signup_test
test "invalid signup information" do get signup_path assert_no_difference 'User.count' do post users_path,user:{ name: "", email: "user@invalid", password: "foo", password_confirmation: "bar" } end assert_template 'users/new' assert_select 'div#error_explanation' # 生成されるHTML要素に左記が含まれるかtest assert_select 'div.field_with_errors' # 生成されるHTML要素に左記が含まれるかtest end
問3
問
7.4.2で実装したflashに対するテストを書いてみてください。どのくらい細かくテストするかはお任せします。 リスト7.33に最小限のテンプレートを用意しておいたので、参考にしてください (ヒント: FILL_INメソッドを適切なコードに置き換えると完成します)。(テキストに対するテストは壊れやすいです。文量の少ないflashのキーであっても、それは同じです。個人的には、flashが空でないかをテストするだけの場合が多いです)
回答
user_signup_test.rb
test "valid signup information" do get signup_path assert_difference 'User.count',1 do post_via_redirect users_path,user:{ name: "Example User", email: "user@example.com", password: "password", password_confirmation: "password" } end assert_template 'users/show' assert_not flash.empty? # 追加 end end
問4
問
7.4.2で触れたように、flash用のHTML (リスト7.25) は読みにくいです。より読みやすくしたリスト7.34のコードに対してテストスイートを実行し、こちらも正常に動作することを確認してください。このコードでは、Railsのcontent_tagヘルパーを使用しています。
回答
application.html.erb
<% flash.each do |message_type,message| %> <%= content_tag(:div, message, class: "alert alert-#{message_type}") %> <% end %>
ここまで