4

Rails 3.2.3 アプリケーションがあり、MiniTest と Capybara を使用して統合テストを実行しています。独自の認証をロールバックし、application_controller.rb に current_user helper_method を作成しました。

私のアプリケーション レイアウト ファイルは、ユーザーがログインしているときに、ログアウトなどの特定のリンクのみを表示します。

ただし、テスト中は current_user メソッドは機能しません。次のようになります。

class ApplicationController < ActionController::Base
  protect_from_forgery
  private

  def authenticate
    if current_user.blank?
      redirect_to root_url, :alert => "You must first log in."
    end
  end

  def authenticate_admin
    unless current_user and current_user.admin?
      redirect_to root_url, :alert => "You must be logged in as an administrator to access     this feature."
    end
  end

  def current_user
    begin
      @current_user ||= User.find(session[:user_id]) if session[:user_id]
    rescue
      nil
    end
  end

  helper_method :current_user
end

したがって、私の application.html.erb ファイルには次のものがあります。

<% unless current_user.blank? %>
 <li><%= link_to logout_path %></li>

したがって、これはブラウザでテストすると機能しますが、私のテストでは機能しません。「current_user」は結局nilになります。

私は BDD を初めて使用しますが、テスト中にセッションが作成されないようにするものはありますか? 私は何が欠けていますか?

4

1 に答える 1

3

注: コントローラーで定義されたヘルパー メソッドは含まれません。

ここから。

解決策は、それらを専用のヘルパー クラスに整理することです。

于 2012-05-20T21:30:30.673 に答える