3

Rails アプリ バンドルを capybara 2.0.0.beta2 から現在の 2.0.1 バージョンに更新しました。(たまたままだベータ版でした。) また、Rspec を 2.11.0 から 2.12.0 に更新して、URL ヘルパーの組み込み方法の変更に対応できるようにしました。

この更新の前に、管理者以外のユーザーが新しいユーザーを作成できないことや、同様の許可/フォームのハッキングの基本などを検証するいくつかのテストを行いました。また、大量割り当て攻撃がカバーされていることを確認するための仕様もあります。それは非常に簡単で、うまく機能しましたが、今は壊れています。

context "non-admin users can" do
  before(:each) do
    login_as_user
  end
  it "Not create new users" do
    page.driver.post users_path, { :params => {
      user_name: "user1",
      user_email: "name@example.com",
      user_password: "124mgldkg3",
      user_role: "user"
    } }
    page.status_code.should be 302
  end
end

許可されていない場所に行こうとする (訪問しようとする) ことだけは問題なく機能しますが、この種のユーザーが投稿することを許可されるべきではないフォームの操作された投稿を行うことはできなくなりました。これらのリクエストのすべてに対して 404 が返されるようになりました。

Capybara や Rspec で何が変わったのか、まったくわかりません。私のリクエストが「文脈から外れる」原因となるのは、確かにいくつかの小さな詳細である可能性があります. 訪問やフォームの投稿と同じセッションやリクエストのコンテキストなしで、リクエストが実行されているように見えます。

そうしたいです:

  • ユーザーに表示されるフォームではなく、カスタムパラメータを使用して投稿します。
  • まだ既存のセッションとリクエストのコンテキストにある(サブドメイン...)

代替技術が見つかりません。私は Rack::Test パスを下っていきましたが、ログインやセッションを行わずに正方形 1 に戻ったことは間違いありません。.カピバラが私のために処理するセッションコンテキストのもの。

4

1 に答える 1

3

Capybarasの内部を掘り下げた後、カスタムPOSTリクエストを実行する現在の作業方法は次のことであることがわかりました。

context "User class users can" do
  before(:each) do
    login_as_user
  end
  it "Not create new users" do
    page.driver.browser.reset_host! # just to be safe
    page.driver.browser.process(:post, users_path, { params: {
      user_name: "user1",
      user_email: "name@example.com",
      user_password: "124mgldkg3",
      user_role: "user"
    }})
    page.status_code.should be 302
  end
end

これは、動作が私の元のコード(上記の質問)と同等です。

于 2012-12-04T12:29:05.477 に答える