試行錯誤した結果、Web上ではエラーが出なくなったのですが、テストを実行すると
MissingTemplateというエラーが出ます。
●コントローラ
Ruby
1 def edit 2 @user = User.find(params[:user_id]) 3 end 4 5 def update 6 @user = User.find(params[:user_id]) 7 if @user.update_attributes(user_params) 8 flash[:success] = "登録情報を更新しました" 9 redirect_to @user 10 elsif 11 render edit_user_setting_path(@user) 12 end 13 end
●テスト
Ruby
1 test "unsuccessful setting edit" do 2 log_in_as(@user) 3 get edit_user_setting_path(@user) 4 patch user_setting_path(@user), params: { user: { name: "", 5 email: "foo@invalid", 6 password: "foo", 7 password_confirmation: "bar" } } 8 assert_redirected_to @user 9 end
getまではテストが成功するのですが、patchの部分でエラーが出ます。
でも、コントローラのupdateにdebuggerを挿入してみたところ、paramsはテストで入力した値に変更されており、@user.update_attributes(user_params)もtrueでした。
●エラーメッセージ
ActionView::MissingTemplate: ActionView::MissingTemplate: Missing template users/762146111/setting/edit with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby, :coffee, :jbuilder]}. Searched in: * "/home/ubuntu/workspace/fashion_search/app/views" app/controllers/users/settings_controller.rb:16:in `update' test/integration/users_edit_test.rb:13:in `block in <class:UsersEditTest>'
●ルーティング(config/routes.rb)
Ruby
1resources :users do 2 resource :setting, only:[ :edit, :update ], controller: 'users/settings' 3end
●現状のルーティング($ rails routesの結果)
Ruby
1edit_user_setting GET /users/:user_id/setting/edit(.:format) users/settings#edit 2 user_setting PATCH /users/:user_id/setting(.:format) users/settings#update 3 PUT /users/:user_id/setting(.:format) users/settings#update
●ビュー(app/views/users/settings/edit.html.erb)
以前はWeb上でもエラーが出ていたのですが、上から3行目のurlをusers_pathからuser_setting_pathに修正したところ、Web上ではエラーが出なくなりました。
Ruby
1<% provide(:title, "ユーザー設定変更") %> 2<% provide(:button_text, '変更を保存') %> 3<% provide(:url, user_setting_path) %> 4<h1>ユーザー登録情報の編集</h1> 5 6<div class="row"> 7 <div class="col-md-6 col-md-offset-3"> 8 <%= render 'users/form' %> 9 <div class="gravatar_edit"> 10 <%= gravatar_image_tag @user %> 11 <a href="http://gravatar.com/emails" target="_blank" rel="noopener" >変更</a> 12 </div> 13 </div> 14</div>
●ビュー(app/views/users/_form.html.erb)
Ruby
1<%= form_for(@user, url: yield(:url)) do |f| %> 2 <%= render 'shared/error_messages', object: @user %> 3 4 <%= f.label :name, "名前" %> 5 <%= f.text_field :name, class: 'form-control' %> 6 7 <%= f.label :email, "Eメールアドレス" %> 8 <%= f.email_field :email, class: 'form-control' %> 9 10 <%= f.label :password, "パスワード" %> 11 <%= f.password_field :password, class: 'form-control' %> 12 13 <%= f.label :password_confirmation, "パスワードの確認" %> 14 <%= f.password_field :password_confirmation, class: 'form-control' %> 15 16 <%= f.submit yield(:button_text), class: "btn btn-primary" %> 17<% end %>
Web上ではエラーが出ないのにテストでエラーが出るのはなぜでしょうか?
テストの書き方に問題があるのか、ルーティングがよくないのか、ほかのところに原因があるのか・・・。
どなたかわかる方、お願いします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。