仕様
AdminアカウントがUserアカウントを管理するアプリケーションを作っています。
なので、User一覧(index)、User詳細(show)、ユーザー登録(new,create)、ユーザー編集(edit,update)、ユーザー削除(destory)。Adminでログインしている状態でしか、これらのアクションをできない様にする。
したい事
・deviseでAdminにログインした状態でしか、アクションを出来ない事を確かめるテストコードを書きたい。
現状
・GET系のアクションはテストコードが成功しているが、POST系のアクション(create, update, delete)はhttp422を返されエラー。
422について調べてみても全くわかりませんでした。
コード
まず、テストコードで「login」という自作メソッドを使っています。
ファイルパスは「spec/support/authentication_macros.rb」です。
RSpec
1module AuthenticationMacros 2 def login 3 let(:admin) {create(:admin)} 4 before do 5 sign_in admin 6 end 7 end 8end
以下の2行を「spec/rails_helper.rb」に書き足して、「login」という自作メソッドを読み込んでいます。
Rspec
1config.include Devise::Test::IntegrationHelpers, type: :request 2config.extend AuthenticationMacros
次に、テストコードです。
RSpec
1require 'rails_helper' 2RSpec.describe 'Pages', type: :request do 3 describe 'ログインした状態でアクションが成功するか' do 4 login 5 describe 'GET系は成功する' do 6 let(:user) { create(:user) } 7 example 'index, show, new, edit' do 8 get '/' 9 get '/users/3' # /users/:idだとエラーが起きるので、idを直接指定指定ます。 10 get '/users/3/edit' 11 get '/users/new' 12 expect(response).to have_http_status(:success) 13 end 14 end 15 describe 'なぜかPOST系は失敗する。422を返される' do 16 example 'create' do 17 post '/users/3/create' 18 expect(response).to have_http_status(:success) 19 end 20 example 'update' do 21 patch '/users/3' 22 expect(response).to have_http_status(:success) 23 end 24 example 'delete' do 25 delete '/users/3' 26 expect(response).to have_http_status(:success) 27 end 28 end 29 end 30end 31
なぜこの様な結果になるのか皆目見当もつきません。
422番が何を指すかもさっぱり分かりません(勿論、色々調べてはいます)
2日間もこれに悩まされています。
どなたか知恵をお貸しください。。。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。