story と ku の 2 つのオブジェクトのパラメーターを取る create アクションの Rspec コントローラー テストを作成しています。ストーリーは、タイトルと large_cover_url の存在を検証します。無効なパラメーターを渡すときにrspecが引数エラーをスローする理由がわかりません。この問題についての洞察を使用できます。
エラーは次のとおりです。
Failure/Error: post :create, story: {title: nil, large_cover_url: "present"}, ku: Fabricate.attributes_for(:ku)
ArgumentError:
wrong number of arguments (0 for 2)
# ./app/controllers/stories_controller.rb:18:in `create'
# ./spec/controllers/stories_controller_spec.rb:59:in `block (4 levels) in <top (required)>'
仕様は次のとおりです。
context "failed story creation" do
let(:bob) { Fabricate(:user) }
before { sign_in_user(bob) }
it "does not create a new story" do
post :create, story: {title: nil, large_cover_url: "present"}, ku: Fabricate.attributes_for(:ku)
expect(Story.count).to eq(0)
end
end
コントローラーのアクションは次のとおりです。
def create
@story = Story.new(params[:story])
@ku = Ku.new(params[:ku])
if @story.save && @ku.save
@story.update_column(:user_id, current_user.id)
@ku.update_column(:user_id, current_user.id)
@story.kus << @ku
redirect_to story_path(@story), flash: {success: "Your story was published."}
else
flash[:error] = "#{@story.errors.full_message.join(', ')}"
render :new
end
end