2

你们有谁知道如何做(实施)这样的事情:

样本特征

...
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
...

我一直在尝试和搜索互联网这么久,但我不知道该怎么做:(

4

2 回答 2

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(不是说它是一个坏工具,而是另一个工具)。

于 2012-11-21T21:09:28.833 回答
0

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

所以在这篇文章中,我将总结我在这个问题及其解决方案上的时间。

相关主题和文档

背景

我正在使用设计 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

但问题是我们真的想做吗?

最后一点:标头调用是可选的。有或没有它们的记录都会被删除。

  • 与他们一起删除返回状态码:204 No Content
  • 没有他们删除返回状态码:302 Found
于 2012-11-22T01:14:37.173 回答