1

Hartl の Rails チュートリアルを進めています。私は 9.6 の最初の課題に取り組んでいます。そこで彼は、Useradmin属性にアクセスできないことをテストするように私に依頼しました。正当化は本の前半にあります。

リスト 9.42の後、Hartl's Rails Tutorial は言う

User モデルで attr_accessible リストを省略した場合 (または愚かにも :admin をリストに追加した場合)、悪意のあるユーザーは次のように PUT リクエストを送信できます。

put /users/17?admin=1

チュートリアルの対応する演習 (演習 9.6.1 ) には、

ユーザー管理者属性にアクセスできないことを確認するテストを追加します

私はこのコードでそのテストを完了しuser_spec.rbました:

expect do
  @user.update_attributes(:admin => true)
end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)

しかし、私はそのテストを取得するためにstackoverflowを使用しました。 これは私の最初のアイデアでした(in user_pages_spec.rb):

expect do
    put user_path(user) + "?admin=1"
end.to raise_error(ActiveModel::MassAssignmentSecurity::Error) # or some other error

しかし、私はそれを機能させることができませんでした。

だから私の質問は:

  1. 私の考えは可能ですか?潜在的なハッカーがコマンド ラインから何をするかを直接テストする方がよいのではないでしょうか? それがカピバラのアイデアで、ユーザーの行動をテストしているのではないでしょうか?

  2. 可能であれば、質量割り当てのテストと PUT アクションのテストに違いはありますか?

  3. もし不可能なら、なぜですか? 必要ないだけですか、それともここで何か不足していますか?

4

1 に答える 1

1

あなたのテストの方が実際には優れていると主張したいと思います。与えられた答えは、実際にはあなたの仕事ではない Rails 機能のテストであると主張する人もいます。しかし、いくつかの異なる方向で物事をテストすることはしばしば良いことだと思います.

私は学生時代から、GET を行う場合を除いて URI 経由でデータを送信することは不可能であるという印象を受けていました。stackoverflow をすばやく検索しても、確認は得られませんでした。ただし、ウィキペディアの記事はそれを暗示しているようです:

http://en.wikipedia.org/wiki/POST_%28HTTP%2

正しいコード行は次のようになると思います

put user_path(user), {user: {admin: 1}, id: user.id}

それが役立つことを願っています。

于 2013-01-31T05:06:53.630 に答える