2010-02-02 9 views
13

En mi especificación controlador que estoy haciendo esto:rspec probar un puesto de controlador de cambiar mis parametros de símbolos para romper las cadenas y mis pruebas

it "should create new message" do 
    Client.should_receive(:create).with({:title => 'Mr'}) 
    post 'create' , :client => {:title => "Mr" } 
end 

... y en mi controlador que estoy haciendo ...

def create 
    client = Client.create(params[:client]) 
end 

Sin embargo, esto está fallando con el mensaje de error siguiente:

expected: ({:title=>"Mr"}) 
     got: ({"title"=>"Mr"}) 

me pregunto por qué esto está ocurriendo una d cómo hacerlo funcionar

Respuesta

15

Es porque está pasando un símbolo y no una cadena. Esto debería solucionarlo:

it "should create new message" do 
    Client.should_receive(:create).with({:title => 'Mr'}) 
    post 'create' , :client => {"title" => "Mr" } 
end 

Aquí hay una entrada de blog sobre el tema: "Understanding Ruby Symbols"

+0

Cómo sabe si su posible para hacer que el mensaje pasarlo como un símbolo de lo que quiera para crear el hash a partir de un modelo mecánico y vuelven símbolos no – ssmithstone

+0

cadenas que no le creen puede hacer tal cosa, es solo la forma en que funciona el POST – marcgg

2

@ssmithone se puede utilizar para pasar ActiveSupport::HashWithIndifferentAccess params como símbolos en lugar de cadenas. Esto debería funcionar:

it "should create new message" do 
    Client.should_receive(:create).with({:title => 'Mr'}.with_indifferent_access) 
    post 'create', :client => {:title => "Mr"} 
end 
Cuestiones relacionadas