rspec тестирует пост контроллера, изменяя мои параметры с символов на строки и ломая мои тесты - PullRequest
13 голосов
/ 02 февраля 2010

В моей спецификации контроллера я делаю это:

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"})

Мне интересно, почему это происходит и как заставить его работать

Ответы [ 2 ]

16 голосов
/ 02 февраля 2010

Это потому, что вы передаете символ, а не строку. Это должно исправить это:

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

Вот блог об этом: " Понимание символов Ruby "

2 голосов
/ 27 февраля 2012

@ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...