Ruby on rails 3 向步骤定义中的控制器发送删除请求

Ruby on rails 3 向步骤定义中的控制器发送删除请求,ruby-on-rails-3,authentication,rspec,devise,cucumber,Ruby On Rails 3,Authentication,Rspec,Devise,Cucumber,你们中有人知道如何做(实现)这样的事情吗: 示例功能 ... scenario: unauthorized user cannot delete event Given list of events When event is deleted Then nothing happen ... 示例_步骤.rb ... When /^event is deleted$/ do delete (_path_to_controller_ + "/%d" % @events.first(

你们中有人知道如何做(实现)这样的事情吗:

示例功能

...
scenario: unauthorized user cannot delete event
  Given list of events
  When event is deleted
  Then nothing happen
...
示例_步骤.rb

...
When /^event is deleted$/ do
  delete (_path_to_controller_ + "/%d" % @events.first().id)
...
# Tell if authentication through HTTP Basic Auth is enabled. False by default.
# It can be set to an array that will enable http authentication only for the
# given strategies, for example, `config.http_authenticatable = [:token]` will
# enable it only for token authentication.
# config.http_authenticatable = false
当然,在这一步中,我想根据rake路由的结果发送一个请求,类似于这样(我已经将资源移动到admin path下):

耙路径

...
DELETE /admin/controller_name/:id(.:format)         controller_name#destroy
...
我已经在互联网上试验和搜索了很长时间,但我不知道怎么做:(

我过去用过向API发送删除请求:

When /^event is deleted$/ do
  header 'Accept', 'application/json'
  header 'Content-Type', 'application/json'

  authorize "username", "password"
  url = _path_to_controller_ + "/%d" % @events.first().id)

  delete url
end

话虽如此,我不确定我是否会建议您这样做。是否将从界面中的某些操作(如单击按钮)中删除该事件?如果是这样,您应该使用capybara登录并单击按钮。这将为您提供完全集成覆盖的好处,您不必处理Rack::Test(不是说这是一个坏工具,而是另一个工具)。

Uff我已经解决了这个问题。 非常感谢比灵顿

因此,在这篇文章中,我将总结我的时间与问题及其解决办法

相关主题和文档

背景

我正在使用Desive gem进行身份验证。我的目标是检查是否可能对资源管理功能(如删除)进行手动黑客攻击

问题

以上;D

解决方案

无法使用默认的设备配置。因为它使用默认禁用的HTTP身份验证

config/initializers/designe.rb

...
When /^event is deleted$/ do
  delete (_path_to_controller_ + "/%d" % @events.first().id)
...
# Tell if authentication through HTTP Basic Auth is enabled. False by default.
# It can be set to an array that will enable http authentication only for the
# given strategies, for example, `config.http_authenticatable = [:token]` will
# enable it only for token authentication.
# config.http_authenticatable = false
因此,如果我们想让上述测试正常工作,我们需要将最后一行更改为:

config.http_authenticatable = true
但问题是我们真的想这么做吗

最后一点注意:标题调用是可选的。记录会被删除,无论有没有标题调用

  • 使用它们删除状态代码为204无内容的退货
  • 如果没有它们,则删除状态代码为302的返回

Thx,我只是想检查是否可以进行手动黑客攻击,尽管水豚方法可以点击所有链接。我刚刚在相反的情况下进行了测试。我尝试以管理员身份删除事件,并
delete
返回
Rack::MockResponse
,错误:
{“错误”:“您需要登录或注册才能继续。”
,但我可以通过capybara的
访问
打开页面,这意味着我登录了!?。我是rails的新手,所以我可能遗漏了一些明显的东西?这是因为Rack::Test请求在单独的进程中运行,需要自己的用户登录。您添加了授权调用吗?是的,我添加了…问题是gem Desive和这是默认配置。