1

これが私のルートです

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

しかし、ジャーニー(1.0.0 => 1.0.4)も更新したレール(3.2.0 => 3.2.8)をアップグレードした後、次のCONTROLLERテスト(IMHOはルートをチェックすべきではないが、明らかにチェックしなかった)が戻ってきましたrails 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"}
   
   

そして、私がすべてのルート変数を完了したとしても

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

アプリケーションは引き続き機能しますが、テストが失敗しているため、いつ停止するかわかりません。

誰かが同様の問題を解決/持っていましたか?

同様の質問で示唆されているように、「レールをアップグレードしない」ことでこのエラーを回避できることはわかっていますが、それが解決策ではないと思います。

Rails3.2.6またはRspec2.11.0にアップデートする際のルーティングエラー

前もって感謝します。

編集:

vehicle  /:type/:brand/:model/:plate(.:format)   site/vehicles#show {:plate=>/[a-z]{3}\d{4}/}
4

1 に答える 1

1

あなたの問題はあなたの正規表現とあなたのテストデータの間のミスマッチにあると思います。エラーメッセージには、次のように表示されます。

No route matches {:plate=>"ABC1586", :model=>"model", :type=>"type", 
 :brand=>"brand", :controller=>"site/vehicles", :action=>"show"}

ただし、ルートにはプレートの次の正規表現があります。

:plate => /[a-z]{3}\d{4}/

それにはすべて小文字が必要です。大文字は一致しません。したがって、テストデータを修正するか、ルートの正規表現を修正する必要があります。

于 2012-10-03T17:26:49.170 に答える