2011-08-28 12 views
7

かなり単純な問題は、(私は考えを持っていると思います)はありませんが、私はいくつかの問題抱えている:Railsの3.1.0.rc6/RSpecの2.6.0でRailsのRSpecのルーティング:でテストアクション:除いては、ルート

を、私は私の製品 'リソースのルーティングをテストしようとしている、次のようにルーティングさ:

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

有効なアクションのためのルーティングは動作しますが、私は編集および更新ルートがないことを確認したいです呼び出し可能。ここで私がしようとしているものです:

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

Failure/Error: lambda { get("/products/1/edit") }.should raise_error expected Exception but nothing was raised # ./spec/routing/products_routing_spec.rb:11:in `block (3 levels) in '

...とはまだありません、私は

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

を実行したときに、私は

Failure/Error: get("/products/1/edit").should_not route_to("products#edit", :id => "1") ActionController::RoutingError: No route matches "/products/1/edit"

ここで何が起こっているか任意のアイデアを得ますか?私はこれがかなりシンプルでなければならないと思っていますが、私はそれを理解できないようです。

答えて

9

なぜラムダが失敗するのか分かりませんが、rspec-rails dslがそのように使用されるとは思われません。このようなことを試しましたか?

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

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

だから、それがルートではない何をするかを指定することはできませんが、それはルーティングされませんように指定することができます。

+0

優勝者がいます。 Strange - 私はRails 2が "エラーを起こす"ラムダを扱うのに使われたと思うが、明らかに3.1ではない。 be_routableメソッドも認識していませんでした - 多くのありがとう。 – PlankTon

+1

非常に便利です!ただ一つの簡単な注記:上記のテストは/spec/routing/xxxx.rbになければならない、またはそれはエラーで失敗するでしょう。たとえば、/spec/requests/xxxx.rbにこれを入れることはできません –

0

フォールバックルートはありますか?なぜそれはエラーがスローされないのか説明しますが、実際には経路が存在しないのでroute_to("products#edit", :id => 1)を評価しようとします。

+0

いい考えですが、これは裸のプロジェクトです - 文字通り今日の午後に始まりました。リダイレクトは設定されていません - 現時点では裸の足場資源、rspec&キュウリです。 – PlankTon

関連する問題