2012-06-12 8 views
8

Trong ứng dụng đường ray 3.1.4, rspec được sử dụng để kiểm tra phương pháp công khai require_signin trong bộ điều khiển ứng dụng. Dưới đây là phương pháp require_signin:RunTimeError: ActionController :: RackDelegation trong rspec 2.10.1 cho đường ray 3.1.4 Trình điều khiển ứng dụng

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

Đây là mã rspec:

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

Trên đây rspec tạo khổng lồ lỗi trang đa bắt đầu như sau:

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>, ........ 

Điều gì có thể sai với mã số rspec? Cám ơn rất nhiều.

+0

Thêm một bounty xin vui lòng. Tôi cũng cần câu trả lời này – tekknolagi

Trả lời

0

Có thể không hoàn toàn hữu ích, nhưng tôi đã đến đây sau khi nhận được lỗi tương tự. Tôi bắt đầu với một bộ kiểm tra đi qua, thực hiện một số thay đổi, và sau đó bắt đầu nhận được lỗi như:

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

Sau khi xem xét kỹ hơn lỗi, tôi nhận thấy rằng nó nói ở đâu đó:

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

tôi vừa thêm tùy chọn :confirmable vào Devise và nhận ra rằng tất cả người dùng mà tôi đã tạo mà tôi đang cố gắng đăng nhập là chưa được xác nhận và không thể đăng nhập thành công. Tôi cần thêm confirmed_at Time.now vào nhà máy/vật cố cho người dùng . Trong ví dụ của bạn mặc dù, nó có vẻ như bạn đang cố gắng kiểm tra khi không đăng nhập, vì vậy tôi không chắc chắn điều này là nhất thiết phải áp dụng.

3

Tôi gặp lỗi này và nhận ra rằng tôi đang kích hoạt chuyển hướng trên bộ điều khiển bằng cách gọi phương thức trợ giúp mà tôi muốn kiểm tra, nhưng tôi chưa thực sự yêu cầu thử nghiệm. Gọi số get :index trước khi gọi đến kỳ vọng đã loại bỏ lỗi.

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

Cảm ơn bạn trong tương lai! Điều này vừa khắc phục vấn đề cho tôi. – taylorthurlow

0

Nếu bạn muốn kiểm tra cơ động, bạn nên sử dụng should_receive trước khi một cuộc gọi send như thế này

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