RunTimeError:ActionController的:: RackDelegation在rs

2019-06-25 10:11发布

在我们的Rails 3.1.4应用程序, 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代码? 非常感谢。

Answer 1:

我碰到这个errror并意识到我是通过调用一个辅助方法我想测试触发控制器上的重定向,但我还没有实际实例测试请求呢。 调用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


Answer 2:

如果您想检查作用机理,你应该使用should_receive一个之前send呼叫这样

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


Answer 3:

可能不完全是有用的,但我来到这里得到同样的错误了。 我开始与路过的测试套件,做了一些修改,然后开始得到这样的错误:

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

在误差左看右看之后,我发现它的地方说:

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

我刚刚加入:confirmable在设计选项,并意识到,我创造了我试图登录的未经证实,因此无法成功登录的所有用户,我需要补充。 confirmed_at Time.now到我厂/夹具创建用户。 在你的榜样,虽然,它好像你正试图测试时没有登录,所以我不知道这是一定适用。



文章来源: RunTimeError: ActionController::RackDelegation in rspec 2.10.1 for rails 3.1.4 application controller