7

ユーザーの更新、表示、削除、演習

「作成」や「新規」などのユーザーコントローラーアクションのRspecテストを作成する方法はありますか?

「作成」と「新規」の2つのアクション自体の違いについてもよくわかりません。誰かが詳しく説明してくれるほど親切にしてくれませんか?

テストを作成した後、redirect_to root_pathを実装するにはどうすればよいですか?before_filtersigned_inセクションに「new」アクションと「create」アクションを含めることになっていると思いますが、これは自動的にルートにリダイレクトされません。

次のようにusers_controller.rbファイルを変更して、テストに合格しようとしました。

  def create
    if signed_in?
      redirect_to root_path
    else
      @user = User.new(params[:user])
      if @user.save
        sign_in @user
        flash[:success] = "Welcome to the Sample App!"
        redirect_to @user
      else
        render 'new'
      end
    end
  end
4

3 に答える 3

10

私はそのためにビフォアフィルターを実行しましたが、うまく機能しているようです。テストではこれを実行しました。

authentication_pages_spec.rbで

describe "signin" do
  describe "authorization" do
    describe "for signed in users" do
      let(:user) { FactoryGirl.create(:user) }
      let(:new_user) { FactoryGirl.attributes_for(:user) }
      before { sign_in user }

      describe "using a 'new' action" do
        before { get new_user_path }
        specify { response.should redirect_to(root_path) }
      end

      describe "using a 'create' action" do
        before { post users_path new_user }
        specify { response.should redirect_to(root_path) }
      end         
    end
  end
end

@WillJonesが言うように、一部の人々はno_capybara: true前のブロックに追加する必要があるかもしれません

と私のユーザーコントローラーで:

before_filter :signed_in_user_filter, only: [:new, :create]

def signed_in_user_filter
  redirect_to root_path, notice: "Already logged in" if signed_in?
end

newアクションとcreateアクションの違いは、RESTアーキテクチャースタイルと関係がありますが、基本的にnewは、要求に応答するユーザーコントローラーからのアクションであり、GET応答するビューを返す役割を果たします(この場合、新しいユーザーフォーム)。create一方、はPOSTリクエストに応答するアクションであり、何もレンダリングせず(javascriptで応答できますが、これは高度なトピックです)、アクションの名前が示すように、新しいユーザーの作成を担当します。

于 2012-07-02T04:29:41.810 に答える
1
  1. はい; これは、 7.16以降で部分的に開始されています。
  2. 実際にユーザーを作成します(create)。1つは、新しいユーザーを作成するためのページ(ですnew
  3. 質問がわかりません。
于 2012-06-20T11:55:44.557 に答える
0

そのためにもビフォアフィルターを実行しましたが、フィルターが異なり、なぜ機能するのかわかりません。

私のユーザーコントローラーには次のエントリがあります

   class UsersController < ApplicationController
.
.
  before_filter :logged_in_user, only: [:new, :create]
.
.
def logged_in_user
      redirect_to(root_path) if !current_user?(@user)
  end

rkrdoの例のように問題なく動作し、対応するテストに合格します。しかし、それは、ユーザーがサインインしているとき、およびその逆の場合、current_userがユーザーと同じではないことを意味しますか?私の意見では、それらは最初のケースでは等しくなければならず、2番目のケースでは等しくないはずです。

于 2013-02-20T08:49:03.070 に答える