Rspec проверяет пост контроллера, изменяя мои параметры от символов до строк и нарушая мои тесты
В моей спецификации контроллера я делаю это:
it "should create new message" do
Client.should_receive(:create).with({:title => 'Mr'})
post 'create' , :client => {:title => "Mr" }
end
... и в моем контроллере я делаю...
def create
client = Client.create(params[:client])
end
Однако это не работает со следующим сообщением об ошибке:
expected: ({:title=>"Mr"})
got: ({"title"=>"Mr"})
Мне интересно, почему это происходит и как заставить его работать.
Ответы
Ответ 1
Это потому, что вы передаете символ, а не строку. Это должно исправить это:
it "should create new message" do
Client.should_receive(:create).with({:title => 'Mr'})
post 'create' , :client => {"title" => "Mr" }
end
Здесь blogpost об этом: " Понимание символов Ruby"
Ответ 2
@ssmithone вы можете использовать ActiveSupport:: HashWithIndifferentAccess для передачи параметров как символов вместо строк. Это должно работать:
it "should create new message" do
Client.should_receive(:create).with({:title => 'Mr'}.with_indifferent_access)
post 'create', :client => {:title => "Mr"}
end