我正在测试一个使用Sorcery进行身份验证的应用。我有一个会话控制器,它处理用户登录/登出与测试一起进行的行动。我知道销毁操作通常以id作为参数,但对于signout功能,这是不必要的。
routes.rb
resources :sessions
# match "/signout", :to => "sessions#destroy"sessions_controller_spec.rb
describe "DELETE 'destroy'" do
it "should log the user out" do
login_user(Factory(:user))
delete :destroy
controller.current_user.should be_nil
controller.should_not be_signed_in
end
endsession_routes_spec.rb
it "should route DELETE /sessions to sessions#destroy" do
{ :delete => "/sessions" }.should route_to(
:controller => "sessions",
:action => "destroy"
)
end上面的两个测试都失败了,因为路由需要一个id。有没有办法摆脱这种必然性?我知道我可以只使用命名为"signout_path“的路由,但我只是好奇是否仍然可以使用session_path,:方法=> :delete而不向它传递id。
真正让我震惊的是,如果我取消控制器规范通过的匹配"/signout“的注释(然而,路由规范没有)。匹配线是如何使控制器规范通过的?
发布于 2012-01-02 04:55:29
尝试将销毁操作映射为:config/routes.rb中会话资源的收集方法:
resources :sessions, :collection => [:destroy]默认情况下,destroy是一个“成员”方法,需要指定的资源才能处理它。
https://stackoverflow.com/questions/7664440
复制相似问题