你们中有谁知道如何做(实施)这样的事情:
sample.feature
...
scenario: unauthorized user cannot delete event
Given list of events
When event is deleted
Then nothing happen
...
sample_steps.rb
...
When /^event is deleted$/ do
delete (_path_to_controller_ + "/%d" % @events.first().id)
...
当然,在这一步中我想根据 rake routes 的结果发送一个请求,就像这样(我已经在 admin 路径下移动了资源):
佣金路线
...
DELETE /admin/controller_name/:id(.:format) controller_name#destroy
...
我一直在试验和搜索互联网这么久但我不知道怎么做:(
答案 0 :(得分:1)
我过去曾使用Rack::Test向API发送DELETE请求:
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(不是它是一个糟糕的工具,而是它的另一个工具)。
答案 1 :(得分:0)
我已经解决了这个问题。 非常感谢Beerlington
所以在这篇文章中,我将总结我的问题及其解决方案的时间。
相关主题和文档
<强>背景强>
我正在使用 devise gem 进行身份验证。我的目标是检查是否可能是手动黑客攻击资源管理功能,如删除。
<强>问题强>
以上; D
<强>解决方案强>
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
无法使用默认的设计配置。因为它使用默认情况下禁用的HTTP身份验证。
<强>配置/初始化/ devise.rb 强>
# 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
但问题是我们真的想做吗?
最后一点: header 调用是可选的。无论有没有记录都会被删除。