0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】永続ログイン時に作成されるremember_tokenの有無をminitestで調べる方法

Posted at

どうした?

Railsチュートリアルにならって永続ログイン機能を実装しました。
永続ログイン時にはUserモデル内で定義されたクラスにremember_tokenというインスタンス変数が付与されます。
本記事は、minitestでそれの有無を調べる方法をメモとして残します。

テスト方法

うまくいかない方法(ログイン時)

users_login_test.rb
assert !@user.remember_digest.nil?

@userremember_tokenをハッシュ化したremember_digestが付与されているかどうかを調べれば良いのかなと思いましたが、minitestはこれをfalseで返してきます。

minitestは、モデル内で定義したインスタンス変数にテストの内部からアクセスできません。
これは、インスタンス変数とminitestのスコープが異なるためです。

cookiesにremember_tokenが存在するかをチェックする方法

cookiesに保存されたremember_tokenの有無を調べる方法です。

users_login_test.rb
assert !cookies[:remember_token].empty?

ログインしていれば、trueを返します。

userがもつremember_tokenとcookiesがもつremember_tokenが一致するかをチェックする方法

モデル内で定義したインスタンス変数にアクセスするには、assignというテストハッシュを使用します。

assign(key = nil)
アクションを実行した結果、インスタンス変数に代入されたオブジェクトを取得

これを利用してuserがもつremember_tokenがcookiesがもつremember_tokenと一致するかをチェックします。
よってテストは以下のようになります。

users_login_test.rb
assert cookies[:remember_token], assigns(:user).remember_token

ログインしていれば、trueを返します。

参考

Railsチュートリアル 9章

Railsガイド ファンクショナルテスト

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?