在我们的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
代码? 非常感谢。
我碰到这个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
如果您想检查作用机理,你应该使用should_receive
一个之前send
呼叫这样
it "should redirect to signin_path" do
controller.should_receive(:redirect_to).with(signin_path)
controller.send(:require_signin)
end
可能不完全是有用的,但我来到这里得到同样的错误了。 我开始与路过的测试套件,做了一些修改,然后开始得到这样的错误:
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