Rails

Railsチュートリアル11章(演習問題11.3.3)

Rails tutorial11.3.3(回答イメージ)

UnsplashMatthew Kwongが撮影した写真

 

表題の問題に悩んだので備忘録として。

書きたいものは【一覧で有効なユーザのみ表示されることを確かめるテスト】

 

手順としては、

 

一覧に表示される最初のユーザーを有効でない状態にして、

再度ページを取得し、

有効なユーザーのみ表示されているか確認する

 

流れになります。

test "should display only activated users" do
      # ページにいる最初のユーザーを無効化する。
      # 無効なユーザーを作成するだけでは、
      # Railsで最初のページに表示される保証がないので不十分
      User.paginate(page: 1).first.toggle!(※コード入力)
      # /usersを再度取得して、無効化済みのユーザーが表示されていないことを確かめる
      get users_path      
      # 表示されているすべてのユーザーが有効化済みであることを確かめる
      assigns(:users).each do |user|
        assert user.(※コード入力)
      end
    end

toggle!メソッドは、 インスタンスに保存されているbooleanの値を反転させ、データベースに保存します。

 

toggleはデータベースに保存はしないので、その点が異なります。

 

処理成功時はtrueを返します。

※booleanとは、一般的には真と偽のような2つの状態を表すデータ型。

 

今回は無効化したいので、activated(有効化済)を渡して反転させます。

 

そして、有効化済みか確かめるためにuserにactivated?を渡します。

test "should display only activated users" do
      # ページにいる最初のユーザーを無効化する。
      # 無効なユーザーを作成するだけでは、
      # Railsで最初のページに表示される保証がないので不十分
      User.paginate(page: 1).first.toggle!(:activated)
      # /usersを再度取得して、無効化済みのユーザーが表示されていないことを確かめる
      get users_path      
      # 表示されているすべてのユーザーが有効化済みであることを確かめる
      assigns(:users).each do |user|
        assert user.activated?
      end
    end
続いて失敗してしまったテストは下記。
test "should redirect when user not activated" do
      get user_path(@inactive_user)
      assert_response  (※コード入力)
      assert_redirected_to (※コード入力)
    end
書きたい内容は
【無効なユーザーをHomeへリダイレクトさせられているか確かめるテスト】。

下記を入力して、テストは成功。
test "should redirect when user not activated" do
      get user_path(@inactive_user)
      assert_response  :redirect
      assert_redirected_to :root
    end

-Rails
-, ,