Спецификации маршрутизации Rspec дают сбой с обратным идентификатором param?


Мои спецификации маршрутизации для rspec возвращают неясную ошибку. В ожидаемые параметры В/С реальные парам парам идентификатор находится в перевернутом положении. Почему и как решать?

require "spec_helper"

describe GameController do
  describe "routing" do

    game = FactoryGirl.create(:game)

    it "routes to #show" do
      get("/game/1").should route_to("game#show", :id => 1)
    end

  end
end

Это приводит к ошибке:

  1) gameController routing routes to #show
     Failure/Error: get("/game/1").should route_to("game#show", :id => 1)
       The recognized options <{"action"=>"show", "controller"=>"game", "id"=>"1"}> did not match <{"id"=>1, "controller"=>"game", "action"=>"show"}>, difference:.
       <{"id"=>1, "controller"=>"game", "action"=>"show"}> expected but was
       <{"action"=>"show", "controller"=>"game", "id"=>"1"}>.
     # ./spec/routing/game_routing_spec.rb:11:in `block (3 levels) in <top (required)>'
1 4

1 ответ:

Rails анализирует параметры как строки, а не целые числа, поэтому params[:id] действительно присваивается "1" вместо 1.

Попробуйте вместо этого ожидать строку:

get("/game/1").should route_to("game#show", :id => "1")