integration testではAuthenticatedTestHelperのlogin_asが使えない
RestfulAuthenticationプラグインで認証しているアプリのintegration testを書こうとしました。
プラグインに同梱されているAuthenticatedTestHelperのlogin_asというログインのヘルパメソッドを使ってみたのですが、なぜか認証できてない。
AuthenticatedTestHelperのlogin_asの中をみてみると、ActionController::TestRequestのオブジェクトのセッションに認証対象のモデルのidを入れてました。
でも、integration testはActionController::Integration::Sessionのコンテキストで実行されていて、TestRequest,TestResponseは使ってないんですね、、、このヘルパはfunctional testしか使えなかったのか、、、
とりあえずintegration test向けにヘルパメソッドを書きました。これをintegration testのクラスでincludeします。
def login_as_for_it(user) reset! u = user ? (user.is_a?(User) ? user.id : users(user)) : nil get "/login" post "/login", :login => u.login, :password => u.password end
(追記)インターフェースを変えないほうがいいですね。
alias login_as_original login_as def login_as(user) if self.class.superclass == ActionController::IntegrationTest #IntegrationTest reset! u = user ? (user.is_a?(User) ? user.id : users(user)) : nil get "/login" post "/login", :login => u.login, :password => u.password else #FunctionalTest login_as_original(user) end end