Как проверить контроллер вложенного ресурса с помощью Rspec? - PullRequest
2 голосов
/ 10 февраля 2012

Мой вложенный ресурс связан с моделями и route.rb:

resources :foos do
  resources :bars
end

Мое приложение работает нормально, но я не могу подтвердить какие-либо утверждения о моих вложенных маршрутах:

describe BarsController do

it "should have a route to 'show'" do
  assert_generates "/foos/bars/1", 
                   {controller: :bars, action: :show, id: "1"}
end

Вот ошибка:

Failure/Error: assert_generates "/foos/bars/1",
ActionController::RoutingError:
No route matches {:controller=>"bars", :action=>"show", :id=>"1"}

Как мне проверить эти вложенные маршруты?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Вы можете использовать assert_generates, assert_recognizes и assert_routing для маршрутов тестирования . Например,

assert_generates "/foo/bar/1", 
     { :controller => "bar", :action => "show", :id => "1" }
2 голосов
/ 10 февраля 2012

Когда вы запускаете rake routes, вы должны видеть, что ваши вложенные маршруты выглядят примерно так:

foo_bar GET    /foos/:foo_id/bars/:id(.:format)      bars#show

Поэтому для соответствия этому маршруту необходимы два параметра: foo_id и id.Так как вы предоставляете только id, он не может найти маршрут.

Кроме того, для тестирования маршрутов в rspec может оказаться более полезным использовать встроенное средство сопоставления routes_to вместовозвращаясь к assert_*, вот так:

it "routes to the 'show' action" do
  { get: "/foos/123/bars/456" }.
    should route_to controller: "bars",
      action: "show",
      foo_id: "123",
      id: "456"
end
...