2011-08-12 23 views
5

Soy bastante nuevo en las pruebas y los rieles y traté de resolverlo por mi cuenta pero sin suerte.probando atributos anidados de rieles con rspec

que tiene los siguientes modelos

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 

y un controlador que es bastante estándar, supongo ...

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

cómo iba a ir sobre y probar esto? He intentado algo como esto, pero no puedo hacerlo funcionar:

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 

Probablemente tiene algo que ver con la forma en que los atributos se pasan a la acción de crear, pero ¿cómo puedo conseguir que esto funcione? Estoy usando raíles 3.1.rc5 pero dudo que eso tenga algo que ver con por qué no está funcionando ...

o no lo probarías del todo ya que es la funcionalidad básica de los rieles y probablemente esté bien probado para empezar?

Respuesta

5

Como dices, realmente no es necesario que lo pruebes, necesariamente, porque estará cubierto por la funcionalidad de los rieles básicos, y este tipo de cosas deberían estar completamente cubiertas por tus pruebas de integración.

Sin embargo, si desea probar esto, la mejor manera es llevar sus registros de desarrollo a la cola y ver qué se publica en la acción, copiar y pegar en la prueba y modificarla según sus necesidades.

El uso de atributos o los atributos factory_girl no lo va a cortar lamentablemente.

+0

Estoy totalmente en desacuerdo con esto. No detectará ninguna regresión si no prueba y no tiene ninguna especificación ni documentación. – phikes

+0

@phikes ¿Viste la parte en la que dije probarlo usando pruebas de integración? – jonnii

5

Probar:

post :create, :product => Factory.attributes_for(:product, :pictures => [ Factory.build(:picture) ]) 
Cuestiones relacionadas