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の結果に従ってリクエストを送信したいと思います。これは次のようなものです (管理パスの下にリソースを移動しました)。

レーキルート

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

そうは言っても、あなたの場合にそれをお勧めするかどうかはわかりません。ボタンのクリックなど、インターフェイスのアクションからイベントが削除されることはありますか? その場合は、カピバラを使用してログインし、ボタンをクリックしてください。これにより、完全な統合カバレッジの利点が得られ、Rack::Test を扱う必要がなくなります (悪いツールではありませんが、別のツールです)。

于 2012-11-21T21:09:28.833 に答える
0

うーん、問題を解決しました。ビアリントンに感謝

そのため、この投稿では、問題とその解決策について自分の時間をまとめます。

関連トピックとドキュメント

バックグラウンド

認証には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 認証を使用するためです。

config/initializers/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 に答える