2010-12-16 8 views
6

rspec'de bir get istek oluşturmak istiyorum.rspec ile belirli bir URL'yi çağırın

get :exec, {:query=>"bla", 
     :id => "something", 
     :user_id => "user" 
    } 

Bu kurar URL gibi: /user/query/something/_XXX_/exec?query=bla

nasıl böyle bir şey yapabilirim: /user/query/something/exec?query=bla

şey benim denetleyicisi o alır isteği kontrol eder ve url gibi bakmak gerektiğidir RSpec? (XXX, route.rb dosyasında kodlanmıştır.)

+0

Ruby on rubils etiketi ekleme özgürlüğünü aldım. Bu hataysa, onu kaldıracağız. –

cevap

16

Bir denetleyici belirtimine başvurduğunuzu farz ediyorum.

Örneğinizde bir karmaşayı geçtiğinizde, anahtarlar rotalarınızdaki değişkenlerle eşleşecektir. Rotayı eşleştirmeyen herhangi bir anahtar için, anahtar/değer çifti bir sorgu dizesi olarak eklenir.

get :exec, :query => 'foo', :id => '1', :user_id => 42 

Ve siz yolları içinde (Raylar 3 tarzı) bu var: Örneğin

, kendi spec bu olduğunu varsayalım

match '/exec/:user_id/:id' => 'whatever#exec' 

Spec sonra anahtarında yerine edecek/değer çiftlerini kullanarak verilen ve şu yolu ile bir istek taklit ettik:

/exec/42/1?query=foo 

Yani, s kadar tel Güzergâhınız için pecs, sadece rotalarınızdaki değişken isimlerini spesifikasyonlarınızdaki parametrelere uygun şekilde eşleştirdiğinizden emin olun.

+0

Benim sorumun asıl sorunu "XXX" dir - bu söyleniş- rota dosyasında kodlanmış (ben bunu adlandırılmış rotalara ihtiyacım olduğu için yapıyorum) yani: lang parametresi, bir şey/XXX/exec var mı? query = bla ve bir şey/YYY/exec? query = bla vaild URL'leri ve bunlardan sadece biri (rota dosyasındaki ilk) rspec'ler aracılığıyla oluşturulabilir ... – Stephan

+1

RSpec'in mümkün olup olmadığını bilmiyorum Başka bir ad üzerinde özel bir yol seçin. Herzaman, paramize uyan ilk rotayı seçeceğine inanıyorum. Bence bu tasarım gereğidir: RSpec, şeyleri izole olarak test etmenizi ister, örn. kontrol cihazınız rotalarınızdan izole edilmiştir. Her zaman, istek URL'sini döndüren yöntemi dışarıda bırakarak kesebileceğinizi varsayalım. – rlkw1024