Ошибки маршрута в тестах контроллера после обновления рельсов и путевого маршрутизатора
Это мой маршрут
match "/:type/:brand/:model/:plate" => "site/vehicles#show",
:constraints => {:plate => /[a-z]{3}\d{4}/}, :as => :vehicle
Проходит маршрутные испытания
# the route test passess
it "routes to #show" do
{:get => '/carro/volksvagen/gol-2-0/abc1234'}.should route_to(
"site/vehicles#show",
:type => "carro",
:brand => "volksvagen",
:model => "gol-2-0",
:plate => "abc1234"
)
end
Но после обновления рельсов (3.2.0 => 3.2.8), которые также обновили маршрут (1.0.0 => 1.0.4), следующий тест CONTROLLER (который IMHO не должен проверять для маршрутов, который он, очевидно, не сделал), возвращается в рельсы 3.2.0) начал выходить из строя.
describe "#show" do
it "should be success" do
get :show, :plate => @vehicle.plate
response.should be_success
end
end
Это поднимает
Site::VehiclesController#show should be success
ActionController::RoutingError:
No route matches {:plate=>"ABC1672", :controller=>"site/vehicles",
:action=>"show"}
И даже если я закончу все маршруты Vars
describe "#show" do
it "should be success" do
get :show, :plate => @vehicle.plate, :model => 'model',
:type => 'type', :brand => 'brand'
response.should be_success
end
end
Я получил:
# No route matches {:plate=>"ABC1586", :model=>"model", :type=>"type",
:brand=>"brand", :controller=>"site/vehicles", :action=>"show"}
Приложение все еще работает, но я не буду знать, когда оно остановится, так как мои тесты не пройдены.
Кто-нибудь решил / имел подобную проблему?
Я знаю, что "не модернизация рельсов" могла бы избежать этих ошибок, как предложено в аналогичном вопросе, но я не думаю, что это решение.
Ошибка маршрутизации при обновлении до Rails 3.2.6 или Rspec 2.11.0
Заранее спасибо.
Редактировать:
vehicle /:type/:brand/:model/:plate(.:format) site/vehicles#show {:plate=>/[a-z]{3}\d{4}/}
1 ответ
Я думаю, что ваша проблема в несоответствии между вашим регулярным выражением и данными теста. В вашем сообщении об ошибке я вижу:
No route matches {:plate=>"ABC1586", :model=>"model", :type=>"type",
:brand=>"brand", :controller=>"site/vehicles", :action=>"show"}
Но у маршрута есть следующее регулярное выражение для плиты:
:plate => /[a-z]{3}\d{4}/
Это требует всех строчных букв; буквы в верхнем регистре не будут совпадать. Поэтому вам нужно либо исправить данные теста, либо исправить регулярное выражение в вашем маршруте.