我在让我的rspec控制器测试在Rspec中传递attr_accessible时遇到问题...但不是从控制台传递。
post :create, :banner => valid_attributes
失败了,但是
Banner.create!(valid_attributes) is accepted.
如果我从横幅模型中取出attr_accessible,或者我取出validates_attachment_presence:bannerimage,它就可以了。尝试将bannerimage_attributes和四个paperclip生成的:bannerimage列添加到我的attr_accessible-没有快乐。尝试取出其他回形针验证器(内容类型,大小) - 仍然没有乐趣。任何建议都非常感激 - 我完全不知所措。
相关代码在这里:
RSPEC测试的相关位:
def valid_attributes
demo_image = File.open(File.join(Rails.root, "spec", "samples", "laptop1.jpg"))
{
:name => 'Test Spec Banner',
:bannerimage => demo_image
}
end
describe "POST create" do
describe "with valid params" do
it "creates a new Banner" do
expect {
post :create, :banner => valid_attributes
}.to change(Banner, :count).by(1)
end
end
型号:
class Banner < ActiveRecord::Base
attr_accessible :name, :url, :bannerimage
has_attached_file :bannerimage, :styles => { :full => "960x", :thumb => "100x" }
validates_attachment_content_type :bannerimage, :content_type => [ 'image/jpg', 'image/jpeg', 'image/gif', 'image/png'], :message => 'file must be a gif, jpeg or png image'
validates_attachment_size :bannerimage, :less_than => 3.megabytes
validates_presence_of :name
validates_attachment_presence :bannerimage
validates_uniqueness_of :name
has_many :pages, :dependent => :nullify
def to_s
name
end
end
编辑: 横幅可以通过网站创建。
下面的相关控制器代码。没有呼叫之前/之后,只是一个标准的宁静创造。
def create
@banner = Banner.new(params[:banner])
if @banner.save
redirect_to admin_banner_url(@banner), notice: 'Banner was successfully created.'
else
render action: "new"
end
end
答案 0 :(得分:1)
您的代码似乎没有任何明显的问题可能导致此问题。您应注意的一件事是name
上有唯一性约束,但valid_attributes
始终返回相同的名称。这不是你的问题所在,我只是提到要记住这一点。
我只能为您提供有关如何自行尝试和调试的建议。您可以在规范assigns(:banner)
中访问新创建的横幅广告。所以,你可以这样做:
describe "POST create" do
describe "with valid params" do
it "creates a new Banner" do
expect {
post :create, :banner => valid_attributes
pp assigns(:banner).errors
}.to change(Banner, :count).by(1)
end
end
这会将横幅的错误转储到运行测试的控制台。如果没有保存横幅,这应该意味着它无效,因此首先要检查生成的错误。您还可以使用pp assigns(:banner)
转储整个横幅以查看其所有属性。
抱歉没有更多帮助。我会在评论中写这个,但我需要很好的格式化。