У меня проблема с выполнением тестов моего контроллера rspec с помощью attr_accessible в Rspec ... но не с консоли.
post :create, :banner => valid_attributes
терпит неудачу, но
Banner.create!(valid_attributes) is accepted.
Если я вычеркну attr_accessible из модели баннеров или вывезу validates_attachment_presence: bannerimage, это сработает. Попытался добавить bannerimage_attributes и четыре сгенерированных скрепки: 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
Edit:
Баннер можно создать через сайт.
Соответствующий код контроллера ниже. Нет до / после звонков, просто стандартное спокойное создание.
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