RunTimeError:ActionController :: RackDelegation在rspec 2.10.1中用于rails 3.1.4应用程序控制器

use*_*363 8 ruby ruby-on-rails http rspec2 ruby-on-rails-3.1

在我们的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  
Run Code Online (Sandbox Code Playgroud)

这是rspec代码:

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

上面会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>, ........
Run Code Online (Sandbox Code Playgroud)

可能是什么错误的rspec代码?非常感谢.

Ant*_*zzo 0

可能并不完全有用,但我在遇到同样的错误后来到这里。我从一个通过的测试套件开始,做了一些更改,然后开始出现如下错误:

RuntimeError:
    ActionController::RackDelegation#status= delegated to @_response.status=, but @_response is nil:
    ...many lines...
Run Code Online (Sandbox Code Playgroud)

仔细查看该错误后,我注意到它在某处说:

@flashes={:alert=>"You have to confirm your account before continuing."}
Run Code Online (Sandbox Code Playgroud)

我刚刚:confirmable在 Devise 中添加了该选项,并意识到我创建的所有尝试登录的用户都未经确认,因此无法成功登录。我需要添加到confirmed_at Time.now为用户创建的工厂/装置中。但在您的示例中,您似乎正在尝试在未登录时进行测试,所以我不确定这是否一定适用。