2012-06-12 16 views
8

Uygulama sistemlerimizde require_signin kamu yöntemini test etmek için raylarımızda 3.1.4 uygulaması, rspec kullanılır.RunTimeError: ActionController :: rspec'te RackDelegation 2.10.1 raylar için 3.1.4 uygulama denetleyicisi

it "should invoke require_signin for those without login" do 
    controller.send(:require_signin) 
    controller {should redirect_to signin_path} 
end 

yukarıdaki rspec aşağıda gibi başlayan devasa çoklu sayfalar hata üretir:

RuntimeError:←[0m 
     ←[31mActionController::RackDelegation#status= delegated to @_response.status=, but @_response is nil: #<ApplicationController:0x3 
a67f10 @_routes=nil, @_action_has_layout=true, @_view_context_class=nil, @_headers={"Content-Type"=>"text/html"}, @_status=200, @_reques 
t=#<ActionController::TestRequest:0x3a68720 @env={"rack.version"=>[1, 1], "rack.input"=>#<StringIO:0x34fad60>, ........ 

yanlış ne olabilir

İşte
def require_signin 
    if !signed_in? 
     flash.now.alert = "Log in first!" 
     redirect_to signin_path 
    end 
    end 

rspec kod şudur: Burada yöntem require_signin olduğunu rspec kodu ile? Çok teşekkürler.

+0

gibi send çağrısından önce should_receive kullanmalıdır ediniz. Bu cevaba ihtiyacım var – tekknolagi

cevap

0

Tamamen kullanışlı olmayabilir, ama aynı hatayı aldıktan sonra buraya geldim. Ben gibi hatalar başlarken, daha sonra yoldan geçen bir test paketi ile başlayan bazı değişiklikler yaptı ve:

@flashes={:alert=>"You have to confirm your account before continuing."} 

I: hatası daha yakından göz aldıktan sonra

RuntimeError: 
    ActionController::RackDelegation#status= delegated to @_response.status=, but @_response is nil: 
    ...many lines... 

, ben bir yerde adı geçen fark sadece Devise'de :confirmable seçeneğini ekledim ve oturum açmaya çalıştığım tüm kullanıcıların doğrulanmadığını ve başarılı bir şekilde giriş yapamayacağını fark ettiler. confirmed_at Time.now Kullanıcılarıma fabrika/fikstür oluşturmaya eklemem gerekiyordu. . Örneğinizde, giriş yapmadiginizda test etmeye calisiyor gibisiniz, dolayisiyla bunun geçerli oldugundan emin degilim.

3

Bu hatayla karşılaştım ve denetleyici üzerinde test etmek istediğim yardımcı bir yöntem arayarak denetleyicide bir yönlendirmeyi tetiklediğimi fark ettim, ancak henüz bir deneme isteğini henüz başlatmamıştım. Beklentiyi çağırmadan önce get :index numaralı telefonu arayarak hatayı ortadan kaldırın. Eğer eylem mekaniğini kontrol etmek isterseniz

it "redirects if some condition" do 
    subject.send(:helper_method) 
    get :action # <= Need this before setting expectation below 
    response.should redirect_to("/somewhere") 
end 
+0

Gelecek için teşekkürler! Bu sadece benim için sorunu çözdü. – taylorthurlow

0

, bir ödül Ekle Bu

it "should redirect to signin_path" do 
    controller.should_receive(:redirect_to).with(signin_path) 
    controller.send(:require_signin) 
end 
İlgili konular