いつもお世話になっております。
Rspecのコントローラーテスト(request_spec)で、param is missing or the value is emptyが解決できません。
困っていること
Rspecのcreateアクションのコントローラーテスト(request_spec)で、テスト用のオブジェクトを作成しているのだが、param is missing or the value is empty:group
とエラーが出てしまう。なお、手動テストでは一連の作業は成功している。
知りたいこと
Rspecで適切なダミーデータを作成できていないことが考えられます。しかし、Rspecを用いたparamsの作成方法が分かりません・・・
また、上記のエラーが出た時のデバック法(主にbinding.pryを使用しているのですが、letで定義したデータの確認方法もできれば知りたいです。
groups_controller.rb
class GroupsController < ApplicationController before_action :authenticate_user! def new @group = Group.new @group.users << current_user end def create @group = Group.new(group_params) binding.pry @group.save if @group.save redirect_to root_path, notice: "グループ登録が完了しました" else flash.now[:alert] = "登録エラー。再度登録をしてください" render :new end end def edit @group = Group.find([:id]) end private def group_params params.require(:group).permit(:name, :detail, :group_avatar, { user_ids: [] } ) end end
factories/user.rb
FactoryBot.define do pass = Faker::Internet.password(8) factory :user do nickname { ForgeryJa(:name).full_name } email { Faker::Internet.free_email } password { pass } password_confirmation { pass } end end
factories_group.rb
FactoryBot.define do factory :group do name { Faker::Team.name } detail { Faker::Lorem.sentence } group_avatar { Rack::Test::UploadedFile.new(Rails.root.join('spec/fixtures/グループ一覧の表示.png')) } end end
groups_request_spec
require 'rails_helper' RSpec.describe "Groups", type: :request do let(:user) { create(:user, email: 'sample@gmail.com') } describe 'group#new' do context 'ユーザーがログインしている場合' do before do sign_in user end it 'new.html.hamlリクエストが成功する' do get new_group_path expect(response.status).to eq 200 end end context 'ユーザーがログインしていない場合' do it 'ログイン画面に遷移する' do get new_group_path expect(response).to redirect_to new_user_session_path end end end describe 'group#create' do context 'パラメーターが妥当な場合' do let(:params) { attributes_for(:group) } before do sign_in user end it 'リクエストが成功する' do post groups_path, params: params expect(response.status).to eq 302 end end end end
エラー内容
1) Groups group#create パラメーターが妥当な場合 リクエストが成功する Failure/Error: params.require(:group).permit(:name, :detail, :group_avatar, { user_ids: [] } ) ActionController::ParameterMissing: param is missing or the value is empty: group # ./app/controllers/groups_controller.rb:35:in `group_params' # ./app/controllers/groups_controller.rb:16:in `create' # ./spec/requests/groups_request_spec.rb:36:in `block (4 levels) in <top (required)>'
user.rb
class User < ApplicationRecord Include default devise modules. Others available are: :confirmable, :lockable, :timeoutable, :trackable and :omniauthable # :validatableは使用しないため削除 devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable has_one :profile has_many :members has_many :groups, through: :members, dependent: :destroy has_many :practices, dependent: :destroy has_many :messages, dependent: :destroy has_many :joinings, dependent: :destroy validates :nickname, presence: true end
group.rb
class Group < ApplicationRecord has_many :members has_many :users, through: :members validates :name, presence: true mount_uploader :group_avatar, GroupAvatarUploader end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/02 12:47
2020/09/02 12:56
2020/09/02 13:07