ぞえの技術めも

Ruby on Rails勉強中

【95日目】【1日20分のRailsチュートリアル】【第8章】演習の2.

Ruby on Railsチュートリアル(第3版)

今日は「8.6 演習」の2.から。

8.6 演習

railstutorial.jp

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章だー