控制器规范中的参数数量错误(给定2,预期为0)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了控制器规范中的参数数量错误(给定2,预期为0)相关的知识,希望对你有一定的参考价值。
我想检查创建操作是否通过。
describe "#create" do
let!(:user){ create(:user) }
let!(:post){ create_list(:post, 3, user: user) }
context "authenticated user" do
it "adds a new post" do
post_params = FactoryBot.attributes_for(:post)
sign_in user
expect{ post :create, params: {post: post_params} }.to change(user.posts, :count).by(1)
end
end
end
但我的错误是
Failure/Error: expect{ post :create, params: {post: post_params} }.to change(user.posts, :count).by(1)
ArgumentError:
wrong number of arguments (given 2, expected 0)
posts_controller:
def create
@post = Post.new(post_params)
if params[:images]
if @post.save
params[:images].each do |img|
@post.photos.create(image: img)
end
else
end
redirect_to posts_path
flash[:notice] = "success"
else
redirect_to posts_path
flash[:alert] = "failure"
end
end
答案
这很可能是因为你使用的变量let!(:post)
与post :create, params: {post: post_params}
(post
方法)发生冲突。
解决方案是将let!(:post)
更改为let!(:posts)
,因为无论如何它都是一个列表。
以上是关于控制器规范中的参数数量错误(给定2,预期为0)的主要内容,如果未能解决你的问题,请参考以下文章
Rail6 db:migrate 失败 - 参数数量错误(给定 1,预期 0)
Rails 2.4 => 3.0:ActiveRecord:`add_modifier`:参数数量错误(给定 3,预期 2)(ArgumentError)