2012-05-11 23 views
6

Estoy tratando de probar una acción de "Publicar creación" con Rspec. El código es el siguiente:Prueba de "Publicar creación" con Rspec

def valid_attributes 
    { 
    :zone => Flymgr::Zone.new(:countries => Flymgr::ZoneCountry.first, 
     :name => 'USA', 
     :description => 'USA Flight', 
     :zipcodes => ''), 
    :price => '100.00', 
    :class => 'first', 

    } 
    end 

    def valid_session 
    {} 
    end 

    before(:each) do 
     @request.env["devise.mapping"] = Devise.mappings[:admin] 
     admin = FactoryGirl.create(:admin) 
     sign_in admin       
     end 

describe "POST create" do 
    describe "with valid params" do 
     it "creates a new Flymgr::Rule" do 
     expect { 
      post :create, {:Flymgr_rule => valid_attributes} 
     }.to change(Flymgr::Rule, :count).by(1) 
     end 

Uno de los atributos requeridos para la forma es una 'zona', este es un cuadro desplegable y las opciones de la lista desplegable se crean con una forma diferente. No sé cómo crear una entrada de formulario usando Rspec. Como puede ver, he tratado de llamar a un método desde un controlador diferente Flymgr::Zone.new. No creo que esto esté funcionando y está rompiendo mi prueba.

¿Alguien puede aconsejar sobre la mejor manera de hacerlo? ¿Tal vez debería usar FactoryGirl para crear una entrada de zona y regla?

Respuesta

5

su parámetro de solicitud hash tiene un objeto como valor de: zona, cuando lo publique será 'to_s'-ed, lo que es poco probable de lo que quiere.

En general la mejor práctica es usar chica de la fábrica para construir sus objetos y el uso de la estrategia attributes_for para parametrizar sus atributos para la solicitud de mensaje: What is the proper way to test 'create' controller actions?

Su pregunta es lo que sugiere que la asociación es una belong_to por lo que solo necesito publicar una identificación. Tenga en cuenta que en la actualidad, FactoryGirl no crea ningún atributo para las asociaciones. Si su definición de la factoría para la regla se hace cargo de la asociación de zonas, puede utilizar esta solución:

FactoryGirl.build(:flymgr_rule).attributes 

para incluir también un IdDeZona pero, entonces usted necesita para excluir los parametros deseados. ("id", "created_at", "updated_at", etc.).

Así que puede que sea mejor que inserte explícitamente la información hash de params para la zona de la forma en que lo ve en una solicitud de publicación válida.

Lea este hilo en atributos y asociaciones factorygirl: https://github.com/thoughtbot/factory_girl/issues/359

3

A medida que el guide señala:

# Returns a hash of attributes that can be used to build a User instance 
attrs = FactoryGirl.attributes_for(:user) 
Cuestiones relacionadas