私は最初のRailsアプリケーションを作っているので、おそらくこれは基本的なものです。Railsコントローラのトラブル(統合?)テスト
私のユーザープロファイルでは、ユーザーにタイトルと説明を追加させたいと考えています。私は彼らがUser
モデルの属性製とroutes.rb
にこれを追加しました:
resources :users do
member do
post 'update_description'
end
end
(まだ書かれていません)と同じ方法で両方の属性を処理します。 TDDを実践するには、ユーザがタイトルを提出すればコントローラがそれをデータベースに保存するというテストを書いてみた。私はそれが統合テストだと思ったが、私は正しい道を得ることができなかった。 (それは統合テストですか?)しかし、リサーチでは、関連するコントローラテストファイルに作業用のpost
文を書き込むことができました。ここでは、コントローラのテストがあります:
test "profile submits new title and description successfully" do
log_in_as(@user)
get :show, id: @user
assert_nil @user.title
post :update_description, id: @user, params: { title: "Lorem ipsum" }
# Next:
# @admin.reload.title
# assert @admin.title == "Lorem ipsum"
# assert_template 'users/show'
# Etc.
end
これは、次のエラーが発生します。
ERROR["test_profile_submits_new_title_and_description_successfully", UsersControllerTest, 2017-10-22 21:42:52 -0400]
test_profile_submits_new_title_and_description_successfully#UsersControllerTest (1508722972.17s)
ActionView::MissingTemplate: ActionView::MissingTemplate: Missing template users/update_description, application/update_description with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
* "/var/lib/gems/2.3.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates"
* "/home/globewalldesk/startthis/app/views"
* "/var/lib/gems/2.3.0/gems/web-console-2.0.0.beta3/app/views"
test/controllers/users_controller_test.rb:83:in `block in <class:UsersControllerTest>'
test/controllers/users_controller_test.rb:83:in `block in <class:UsersControllerTest>'
私は、これはRailsがビューファイルを探しているとものを見つけることができないことを意味、私は見ていないことを集めますなぜpost :update_description
がビューを探しているのですか...私は、ビューなしで情報をポストすると思っていました(私は、ビューがない場合と同じ方法で動作する同様のルートを持っています)。 update_description
の方法はコントローラUsers
にあります。私は多くの研究をしましたが、何が間違っているのか分かりません。助けて! TIA。
はうわー、私はJavaScriptのテストを行うことについて多くのオンライン日の最後のカップルを探していたことを行ってhaventは場合。私が聞いたテストフレームワークの1つはCapybaraでした。リンク先のRails Guidesページには、「システムテストではCapybaraをベースに使用しています。それが私が使用しているRails 4.2.2に当てはまるかどうか分かりますか?とにかく、私は少なくとも統合テストのためにあなたのソリューションを試してみるつもりです。システムテストは、すぐに学べるようなものです。ありがとう! – globewalldesk
それでは、 'Users#edit'に頼るのではなく' update_description'ルートを作ってしまう問題があります。ユーザ編集ページ( 'users//edit'にある)は、名前とパスワードを持っています。プロフィールページは 'users/'にあります。私は、タイトル、説明、およびメッセージを受け取るようなプロファイルyタイプの情報をユーザーが追加できるようにしたいと考えています。だから私は...それらは 'User'プロパティだと分かりました。しかし、私は既にユーザ名とパスワード情報を扱う 'edit'アクションを持っています。だから、私はちょうどユーザー情報の編集を処理するための新しいルートを作成します。 良いソリューションはありますか? –
globewalldesk
助けてくれてありがとう。私は2つのことが間違っている。まず、統合テストで、間違った 'post'行を使用していました。これはうまくいきました: 'post" /users/#{@non_admin.id}/update_description "、 params:{タイトル:"私は絶え間ない悲しみの男です " } ' もう1つの問題は、' Users#update_description'アクションが_some_種類のビューをロードすることになっていたことです(私はまだメソッドを書いていませんでした!)。私は単に 'redirect_to user_path(@user)'を追加して動作しました! – globewalldesk