Ошибки маршрута в тестах контроллера после обновления рельсов и путевого маршрутизатора

Это мой маршрут

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}/

Это требует всех строчных букв; буквы в верхнем регистре не будут совпадать. Поэтому вам нужно либо исправить данные теста, либо исправить регулярное выражение в вашем маршруте.

Другие вопросы по тегам