тестирование вложенных атрибутов рельсов с помощью rspec - PullRequest
6 голосов
/ 12 августа 2011

Я довольно новичок в тестировании и рельсах и попытался сам разобраться, но безуспешно.

У меня есть следующие модели

class Picture < ActiveRecord::Base
  belongs_to :product
  has_attached_file :image
end

class Product < ActiveRecord::Base
  has_many :pictures, :dependent => :destroy
  accepts_nested_attributes_for :pictures, :reject_if => lambda { |p| p[:image].blank? }, :allow_destroy => true
end

и контроллер, который довольностандарт, я думаю ...

def create
  @product = Product.new(params[:product])
  if @product.save
    redirect_to products_path, :notice => "blah."
  else
    render :action => "new"
  end
end

как бы я проверил это?я пробовал что-то вроде этого, но я не могу заставить его работать:

describe ProductsController do
  it "adds given pictures to the product" do
    product = Factory.build(:product)
    product.pictures.build(Factory.attributes_for(:picture))
    post :create, :product => product.attributes
    Product.where(:name => product[:name]).first.pictures.count.should == 1 # or something
  end
end

Возможно, это как-то связано с тем, как атрибуты передаются действию создания, но как я могу заставить это работать?Я использую rails 3.1.rc5, но я сомневаюсь, что это как-то связано с тем, почему он не работает…

или вы не будете проверять это вообще, так как это базовая функциональность рельсов и, скорее всего, хорошо проверенная для начала?

Ответы [ 2 ]

6 голосов
/ 15 августа 2012

Попробуйте:

post :create, :product => Factory.attributes_for(:product, :pictures => [ Factory.build(:picture) ])
5 голосов
/ 12 августа 2011

Как вы говорите, вам не обязательно проверять это, обязательно, потому что оно будет охватываться базовой функциональностью рельсов, и подобные вещи должны быть полностью покрыты вашими интеграционными тестами.

Однако, если вы действительно хотите проверить это, лучше всего подключить журналы разработки и посмотреть, что публикуется в действии, скопировать и вставить это в свой тест, а затем изменить его в соответствии с вашими потребностями.

Использование атрибутов или атрибутов factory_girl, к сожалению, не поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...