同じにやっても動かない

書いてある通りやっているのに動かないのです

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