首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 3.1:在控制器和路由规范中测试“删除'destroy'”

Rails 3.1:在控制器和路由规范中测试“删除'destroy'”
EN

Stack Overflow用户
提问于 2011-10-06 00:17:38
回答 1查看 3.8K关注 0票数 1

我正在测试一个使用Sorcery进行身份验证的应用。我有一个会话控制器,它处理用户登录/登出与测试一起进行的行动。我知道销毁操作通常以id作为参数,但对于signout功能,这是不必要的。

routes.rb

代码语言:javascript
复制
resources :sessions

# match "/signout", :to => "sessions#destroy"

sessions_controller_spec.rb

代码语言:javascript
复制
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 
end

session_routes_spec.rb

代码语言:javascript
复制
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“的注释(然而,路由规范没有)。匹配线是如何使控制器规范通过的?

EN

回答 1

Stack Overflow用户

发布于 2012-01-02 04:55:29

尝试将销毁操作映射为:config/routes.rb中会话资源的收集方法:

代码语言:javascript
复制
resources :sessions, :collection => [:destroy]

默认情况下,destroy是一个“成员”方法,需要指定的资源才能处理它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7664440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档