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