test_helper.rb の setup() とかteardown()とか
コントローラーのテストでログインをエミュレートするために、下記のようなコードをtest_helper.rbに書けと本に書かれています。
class ActiveSupport::TestCase def login_as(user) session[:user_id] = users(user).id end def logout session.delete :user_id end def setup login_as :one if defined? session end end
確かにこれで動くのですが、いったい何でここで定義するだけで動くようになるのか説明がないのでわからない。
Google先生に聞いたところ、下記のような事みたいです。
個々のfunctional testの最初に、test_helper.rbで定義されている setup が呼び出される
なるほど。
この中に login_as()を書いておけば、テストが始まるときに呼び出してsessionを設定してくれるわけですね。
個々のfunctional testの最後に、test_help.rbで定義されている teardown が呼び出される
なるほど。
本のコードのままだと、logoutはコールされないわけですね。。。
実際 p "LOGOUT!!!" と入れてもプリントされませんでした。
というわけで、最終的には以下になりました。
class ActiveSupport::TestCase def login_as(user) session[:user_id] = users(user).id end def logout session.delete :user_id end def setup login_as :one if defined? session end def teardown logout if defined? session end end