Rspec & Paperclip: сломан с помощью attr_accessible? - PullRequest
0 голосов
/ 25 августа 2011

У меня проблема с выполнением тестов моего контроллера 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

1 Ответ

1 голос
/ 26 августа 2011

Кажется, нет никаких очевидных проблем с вашим кодом, которые могли бы вызвать это.Следует отметить, что у вас есть ограничение уникальности для 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), чтобы увидеть все его атрибуты.

Извините, что не помог вам.Я написал бы это в комментарии, но мне нужно было хорошее форматирование.

...