Ruby on rails rspec测试控制器post将我的参数从符号更改为字符串并中断我的测试

Ruby on rails rspec测试控制器post将我的参数从符号更改为字符串并中断我的测试,ruby-on-rails,rspec,Ruby On Rails,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 但是,此操

在我的控制器规范中,我正在执行以下操作:

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

我想知道为什么会发生这种情况,以及如何让它工作,因为你传递的是一个符号而不是字符串。这应该可以解决这个问题:

it "should create new message" do
  Client.should_receive(:create).with({:title => 'Mr'})
  post 'create' , :client => {"title" => "Mr" }
end
这里有一篇关于它的博文:“

@ssmithone,您可以使用它将参数作为符号而不是字符串传递。这应该起作用:

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

你知道有没有可能让post把它作为一个符号传递进来,因为我想从一个机械师的蓝图中创建散列,他们返回的是符号而不是字符串。我不认为你能做这样的事情,这就是post的工作方式