表題の問題に悩んだので備忘録として。
書きたいものは【一覧で有効なユーザのみ表示されることを確かめるテスト】
手順としては、
一覧に表示される最初のユーザーを有効でない状態にして、
再度ページを取得し、
有効なユーザーのみ表示されているか確認する
流れになります。
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