2011-03-17 22 views
12

Raf :: Test kullanarak Sinatra uygulamam için RSpec testleri yazmaya çalışıyorum. Tanımlama bilgilerini nasıl kullanabileceğimi anlayamıyorum. Örneğin, uygulamam çerezleri ayarladıysa (yoluyla değil: oturum) Bu çerezin uygun şekilde ayarlanıp ayarlanmadığını nasıl kontrol edebilirim?Çerezleri Rafla Kullanma :: Test

Ayrıca, bu tanımlama bilgisiyle nasıl istek gönderebilirim?

cevap

16

Raf :: Test, isteklerin üzerine devam eden bir çerez kavanozu saklar. rack_mock_session.cookies ile erişebilirsiniz. adından da anlaşılacağı gibi

it 'defines a cookie' do 
    get '/' 
    rack_mock_session.cookie_jar["foo"].should == "bar" 
end 

Ayrıca last_request.cookies ile çerezleri erişmek, ancak, içerdiği:

get '/cookie/set' do 
    response.set_cookie "foo", :value => "bar" 
end 

Şimdi böyle bir şey ile test edebilirsiniz: Diyelim ki böyle bir işleyici var diyelim son istek için çerez, yanıt değil. set_cookie ile çerezleri ayarlayabilir ve clear_cookies ile temizleyebilirsiniz.

it 'shows how to set a cookie' do 
    clear_cookies   
    set_cookie "foo=quux" 
    get '/' 
    last_request.cookies.should == {"foo" => "quux"} 
end 

Güncelleme: çerez kavanoz testi olguda (it blok) karşısında kalıcı olmasını isterseniz, herhangi test durumları çalıştırmadan önce Raf oturumu başlatmak gerekiyor. Bunu yapmak için, bu before kancasını describe bloğunuza ekleyin.

before :all do 
    clear_cookies 
end 

Alternatif, örneğin her istek önce gerekli çerezlere kurmak için before :each kullanabilirsiniz.

+0

Tamam, şimdi görüyorum ki bu tanımlama bilgisi uygun şekilde ayarlanmış, ancak geçerli bir tanımlama bilgisi gerektiren bir rota isteğinde bulunduğumda - hata aldım. (çerez ayarlanmamışsa veya yanlış ise sunucu 401 hatası döndürür) – Andoriyu

+0

UPD. rack_mock_session.cookie_jar ["foo"] sadece bir mesajda boş değil, sonraki testte boş. – Andoriyu

+0

UPD. Çerezleri global varda saklayarak çalıştı, böylece her istekten önce çerez ayarlıyorum. – Andoriyu

İlgili konular