RspecでPOST系のアクションをテストするとHTTPコード422を返される
仕様
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」です。
module AuthenticationMacros
def login
let(:admin) {create(:admin)}
before do
sign_in admin
end
end
end
以下の2行を「spec/rails_helper.rb」に書き足して、「login」という自作メソッドを読み込んでいます。
config.include Devise::Test::IntegrationHelpers, type: :request
config.extend AuthenticationMacros
次にテストコードです。
require 'rails_helper'
RSpec.describe 'Pages', type: :request do
describe 'ログインした状態でアクションが成功するか' do
login
describe 'GET系は成功する' do
let(:user) { create(:user) }
example 'index, show, new, edit' do
get '/'
get '/users/3' # /users/:idだとエラーが起きるので、idを直接指定指定ます。
get '/users/3/edit'
get '/users/new'
expect(response).to have_http_status(:success)
end
end
describe 'なぜかPOST系は失敗する。422を返される' do
example 'create' do
post '/users/3/create'
expect(response).to have_http_status(:success)
end
example 'update' do
patch '/users/3'
expect(response).to have_http_status(:success)
end
example 'delete' do
delete '/users/3'
expect(response).to have_http_status(:success)
end
end
end
end
なぜこの様な結果になるのか皆目見当もつきません。
422番が何を指すかもさっぱり分かりません(勿論、色々調べてはいます)
2日間もこれに悩まされています。
どなたか知恵をお貸しください。。。