ruby-on-rails – 用于rails 3.1.4应用程序控制器的rspec 2.10.1中的RunTimeError:ActionController :: RackDelegation

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 用于rails 3.1.4应用程序控制器的rspec 2.10.1中的RunTimeError:ActionController :: RackDelegation前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@
在我们的rails 3.1.4 app中,rspec用于测试应用程序控制器中的公共方法require_signin.这是方法require_signin:
def require_signin
    if !signed_in?  
      flash.now.alert = "Log in first!"
      redirect_to signin_path
    end
  end

这是rspec代码

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

以上rspec生成巨大的多页错误,如下所示:

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

rspec代码有什么问题?非常感谢.

解决方法

我遇到了这个错误,并意识到我通过调用我想测试的辅助方法触发控制器上的重定向,但我还没有实际实例化测试请求.在调用期望之前调用get:index摆脱了错误.
it "redirects if some condition" do
  subject.send(:helper_method)
  get :action # <= Need this before setting expectation below
  response.should redirect_to("/somewhere")
end

猜你在找的Ruby相关文章