Rails RSpec Routing: тестирование действий в: кроме НЕ маршрутизировать - PullRequest
8 голосов
/ 28 августа 2011

Довольно простая проблема (я бы подумал), но у меня есть некоторые проблемы:

В Rails 3.1.0.rc6 / RSpec 2.6.0 я пытаюсь проверить маршрутизацию ресурса моих «продуктов», маршрутизируемого так:

resources :products, :except => [:edit, :update]

Маршрутизация для допустимых действий работает, но я хочу убедиться, что маршруты редактирования и обновления не могут быть вызваны. Вот что я пытаюсь:

it "does not route to #edit" do
  lambda { get("/products/1/edit") }.should raise_error
end

Сбой / Ошибка: lambda {get ("/ products / 1 / edit")} .should поднять_error ожидаемое исключение, но ничего не было поднято # ./spec/routing/products_routing_spec.rb:11:in `блок (3 уровня) в '

... И все же, когда я бегу

it "does not route to #edit" do
  get("/products/1/edit").should_not route_to("products#edit", :id => "1")
end

Я получаю

Ошибка / Ошибка: получить ("/ products / 1 / edit"). Should_not route_to ("products # edit",: id => "1") ActionController :: RoutingError: Не найдено ни одного маршрута "/ products / 1 / edit"

Есть идеи, что здесь происходит? Я предполагаю, что это должно быть довольно просто, но я не могу понять это.

Ответы [ 2 ]

10 голосов
/ 28 августа 2011

Я не знаю, почему лямбда не работает, но я не думаю, что rspec-rails dsl предназначен для такого использования Вы пробовали что-то подобное?

{ :get => "/products/1/edit" }.should_not be_routable

http://relishapp.com/rspec/rspec-rails/docs/routing-specs/be-routable-matcher

Таким образом, вы не можете указать, к чему он не направляется, но вы можете указать, что он не маршрутизируется.

0 голосов
/ 28 августа 2011

У вас есть запасной маршрут? Потому что это объясняет, почему не выдается никакой ошибки, но попытка оценить route_to("products#edit", :id => 1) вызовет повышение, поскольку маршрут не существует.

...