【95日目】【1日20分のRailsチュートリアル】【第8章】演習の2.
今日は「8.6 演習」の2.から。
8.6 演習
2. 8.4.6では、現在のアプリケーション設計では、リスト8.51の統合テストで仮想のremember_token属性にアクセスする手段がないことを説明しました。
実は、assignsという特殊なテストメソッドを使用するとアクセスできるようになります。
(中略)
[remember me] チェックボックスのテストを改良してください。
うーん、、何となく分かるような分からないような。。。
とりあえず演習はこなそう。
まずSessionコントローラーで@userというインスタンス変数を定義するように変更。
user
を@user
に置換しただけ。
リスト8.60: class << selfを使ってトークンやダイジェストの新しいメソッドを定義する
app/controllers/sessions_controller.rb
def create @user = User.find_by(email: params[:session][:email].downcase) if @user && @user.authenticate(params[:session][:password]) log_in @user params[:session][:remember_me] == '1' ? remember(@user) : forget(@user) redirect_to @user else
次は、cookiesにユーザーの記憶トークンが正しく含まれているかどうかをチェックするテストコードを書けばいいっぽい。
リスト8.62: [remember me] テストを改良するためのテンプレート
test/integration/users_login_test.rb
test "login with remembering" do log_in_as(@user, remember_me: '1') assert_equal cookies['remember_token'], assigns(:user).remember_token end
これでいいのかな。。。
テスト実行してテストが通ることは確認。
$ bundle exec rake test 29 tests, 67 assertions, 0 failures, 0 errors, 0 skips
サンプルソースが用意されているからこそできてる演習。まぁいいか。
一応演習は終わり!
今日の学習時間は【23分】。
次は「第9章 ユーザーの更新・表示・削除」から。
やっと9章だー