2013-09-08 25 views
9

Bu, bir süredir beni rahatsız eden bir sorundur. Json'da veri ve json'da yanıt alması gereken bir API işlevi yapıyorum. Denetleyici testlerim sorunsuz çalışıyor (Verdiğim kadarıyla veri zaten JSON'un kodunu çözüyor ve sadece cevabın yorumlanması gerekiyor).Raylar JSON API sınaması PARAMS ile POST isteği JSON

Ayrıca, JSON argümanlarıyla test etmek için kıvrım kullandığımdan ve işlevin mükemmel çalıştığından, bu işlevin iyi çalıştığını biliyorum. (örn .: curl -i - başlık) Kabul: uygulama/json "- başlık" İçerik Türü: uygulama/json "-d" {"test": {"email": "[email protected]"} } ')

Ama açıkçası, bunu otomatik olarak test etmek için istek (özellik) testleri yazmak istiyorum. Gördüğüm gibi, tam olarak kıvrılma gibi çalışmalı, yani dışarıdan bir çağrı gibi servisime çarptı. Bu, JSON’daki argümanları geçmek ve bir cevap almak istediğim anlamına geliyor. İnsanların zaten çözdüğü gibi argümanları tedavi ettiklerini görebildiğim tüm örnekler bu yana oldukça kayboldum.

Sorum şu: Sorumlulukları göndermek ve JSON olarak talep etmek için yanlış bir önermeyi takip ediyorum çünkü bu rayların çalışıp çalışmadığını test ediyorum çünkü bu onun sorumluluğunda mı? Fakat kodumun yanlış argümanlara ne kadar güçlü olduğunu ve JSON ile denemek istediğimi görmek isterim.

bu tip bir şey: Bu nasıl mümkün olduğunu

it "should return an error if there is no correct email" do 
    params = {:subscription => {:email => "andre"}} 

    post "/magazine_subscriptions", { 'HTTP_ACCEPT' => "application/json", 'Content-Type' => 'application/json', 'RAW_POST_DATA' => params.to_json } 
end 

biliyor musunuz? ve yanlış test ettiğimi düşünüyorsanız lütfen bana bildirin.

tüm iyi,

Andre

cevap

17

Burada bir yazı (RSpec request test merges hashes in array in POST JSON params) benim cevabını buldu, ben isteğine argümanlar yanlış endişe ne yaptığını düşünüyorum.

nedenle bu çalıştı: json`:

kısalık için
it "should return an error if there is no correct email" do 
    params = {:subscription => {:email => "andre"}} 

    post "/magazine_subscriptions", params.to_json, {'ACCEPT' => "application/json", 'CONTENT_TYPE' => 'application/json'} 
end 
+5

, 'sonrası '/ magazine_subscriptions', params.to_json, biçim olarak yazmak. – user664833

+0

@ user664833 Bu daha zarif – Tudorizer

+2

Ben zaten bir json nesnesi olarak biçimlendiriyorsanız .to_json gerekli olduğunu sanmıyorum. Bence 'post'/magazine_subscriptions ', params, format:: json' –

1
describe '#create' do 
    let(:email) {'andre'} 
    let(:attrs) {{email: email}} 
    let(:params) {{format: :json, subscription: attrs}} 

    it "should return an error if there is no correct email" do 
    post "/magazine_subscriptions", params 
    end 
end 
+1

Bunun için teşekkürler. Son zamanlardaki raylar için bir örnek bulmakta zorlandım. "post"/magazine_subscriptions ", abonelik: subscription_params, format:: json 'benim için anahtar oldu. Hayır 'to_json' gerekli. – jrhorn424

İlgili konular