2010-02-02 5 views
13

Nel mio controller spec sto facendo questo:RSpec testare un post di controllo cambiare le mie params da simboli per stringhe e rompendo le mie prove

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

... e nel mio controller che sto facendo ...

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

tuttavia questo è fallendo con il seguente messaggio di errore:

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

mi chiedo perché questo sta accadendo un d come farlo funzionare

risposta

15

È perché stai passando un simbolo e non una stringa. Questo dovrebbe risolvere il problema:

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

Ecco un blogpost a questo proposito: "Understanding Ruby Symbols"

+0

fai a sapere se il suo possibile per rendere il posto passarlo come un simbolo come voglio creare l'hash da un progetto macchinista e tornano simboli non stringhe – ssmithstone

+0

non credo si può fare una cosa del genere, è proprio il modo in cui funziona POST – marcgg

2

@ssmithone si potrebbe usare ActiveSupport::HashWithIndifferentAccess passare params come simboli invece di stringhe. Questo dovrebbe funzionare:

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