2011-08-28 23 views
7

Oldukça basit bir sorun yapmak dışında (I düşünce olurdu), ama bazı sorunlar yaşıyorum:Raylar RSpec Yönlendirme: eylemleri Test: DEĞİL rotada

Rails

3.1.0.rc6/RSpec 2.6.0 benim 'ürünlerin kaynağın yönlendirme sınamak çalışıyorum, böyle yönlendirilir:

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

geçerli eylemler için yönlendirme çalışır, ancak ben düzenleme ve güncelleme yolları değildir sağlamak istiyoruz çağrılabilir. İşte çalıştığım şey:

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 '

... Ve yine, ben

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

çalıştırdığınızda ben

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

burada neler olup bittiğini bir fikrin var mı? Tahminimce bu oldukça basit olmalı, ama bunu anlayamıyorum.

cevap

9

Lambda'nın neden başarısız olduğunu bilmiyorum ama rspec raylarının dsl'in böyle kullanılmasının amaçlandığını düşünmüyorum. Böyle bir şey denedin mi?

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

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

Yani onu rota değil ne belirtemez, ancak bunu yönlendirilir almaz belirtebilirsiniz.

+0

Bir kazananımız var. Garip - Ben Rails 2 lambda "yükseltme hatası" işlemek için kullanılan, ama açıkça 3.1 değil düşünüyorum. Be_routable yönteminin farkında bile değildim - çok teşekkürler. – PlankTon

+1

Çok faydalı! Sadece bir hızlı not: Yukarıdaki test, /spec/routing/xxxx.rb içinde OLMALIDIR veya bir hatayla başarısız olur. Örneğin, bunu /spec/requests/xxxx.rb içinde yapamazsınız –

0

Geri dönüş rotanız var mı? Çünkü bu, hiçbir hatanın neden atıldığını açıklamıyor, ancak rota mevcut olmadığından, route_to("products#edit", :id => 1) değerini değerlendirmeye çalışıyorum.

+0

Güzel düşünce, ama hayır. Bu çıplak bir proje - tam anlamıyla bu öğleden sonra başladı. Hiçbir yönlendirmeler kurulmadı - şu anda sadece el değmemiş çıplak iskelet kaynakları, rspec ve salatalık. – PlankTon