Rspec テスト内のコントローラー アクションに JSON として投稿しようとすると問題が発生します。
RSpec.describe RegistrationsController, type: :controller do
context 'Adding a Valid User' do
it 'Returns Success Code and User object' do
@params = { :user => {username: 'name', school: 'school'} }.to_json
post :create, @params
end
end
end
現時点では、ポストリクエストの起動を成功させたいのですが、常にこのエラーが返されます。
Failure/Error: post :create, @params
AbstractController::ActionNotFound:
Could not find devise mapping for path "/lnf".
私のルートは次のように設定されています。
Rails.application.routes.draw do
constraints(subdomain: 'api') do
devise_for :users, path: 'lnf', controllers: { registrations: "registrations" }
devise_scope :user do
post "/lnf" => 'registrations#create'
end
end
end
Rake ルートは次を出力します。
Prefix Verb URI Pattern Controller#Action
user_registration POST /lnf(.:format) registrations#create {:subdomain=>"api"}
lnf POST /lnf(.:format) registrations#create {:subdomain=>"api"}
同じアクションに対して 2 つの宣言があるということでしょうか?
数時間の骨の折れる作業の後、次の手順を実行することでテストが正しく通過し、JSON として投稿できるようになりました。
require 'rails_helper'
RSpec.describe RegistrationsController, type: :controller do
before :each do
request.env['devise.mapping'] = Devise.mappings[:user]
end
context 'Adding a Valid User' do
it 'Returns Success Code and User object' do
json = { user: { username: "richlewis14", school: "Baden Powell", email: "[email protected]", password: "Password1", password_confirmation: "Password1"}}.to_json
post :create, json
expect(response.code).to eq('201')
end
end
end
私のルートは通常に戻りました:
Rails.application.routes.draw do
constraints(subdomain: 'api') do
devise_for :users, path: 'lnf', controllers: { registrations: "registrations" }
end
end
私のテスト環境では、以下を追加する必要がありました。
config.action_mailer.default_url_options = { host: 'localhost' }
ここでの鍵は次のとおりです。
request.env['devise.mapping'] = Devise.mappings[:user]
それが何をするのかはまだ完全にわかっていないので、次に調べるリストにありますが、テストは実行され始めており、合格し始めています。