1

これが私のテストです:

「test_helper」が必要

class SessionsControllerTest < ActionController::TestCase
  setup do
    @request.env["devise.mapping"] = Devise.mappings[:user]
    @u = Factory :user, :password => :mypass, :password_confirmation => :mypass
  end
  test 'log in page loads' do
    get :new
    assert :success
  end
  test 'log in with devise password' do

    post :create, :user => {:email => @u.email, :password => 'mypass'}
    ap session
  end

end

次の出力が表示され、サインインが失敗したことが示されます。

Loaded suite test/functional/sessions_controller_test
Started
.{
        "action" => "create",
        "locale" => "en",
    "controller" => "sessions",
          "user" => {
        "password" => "mypass",
           "email" => "458286@email.com"
    }
}
{
    "flash" => {
        :alert => "Invalid email or password."
    }
}
.
Finished in 0.49123 seconds.

これは私のセッションコントローラーです:

#this is an extension of the devise controller for sessions
class SessionsController < Devise::SessionsController
  before_filter :set_title_h1, :only => :new
  before_filter :debug, :only => :create
  before_filter :old_password_system_fix, :only => :create

  private

  def set_title_h1
    @layout[:show_h1] = false
    title 'Sign in Or Register'
  end
  def after_sign_in_path_for(resource)
  #override Devise default sign in path /opt/local/lib/ruby/gems/1.8/gems/devise-1.1.2/lib/devise/controllers/helpers.rb
    #edit_user_registration_path
    '/en/main/index' #forces locale to be defined
  end

  def after_sign_out_path_for(resource)
  #override Devise default sign out path /opt/local/lib/ruby/gems/1.8/gems/devise-1.1.2/lib/devise/controllers/helpers.rb
    main_index_path
  end
  def old_password_system_fix
  #purpose is to bring old users into the new system by setting their old password to the new format

    require 'digest/md5'

    email = params[:user][:email]
    pw    = params[:user][:password]

    #get user
    u = User.find_by_email email

    return if u.nil?

    #if they don't have a devise-style pw, authenticate with old
    if u.encrypted_password.blank? && u.old_password.present?

      #if [params pw] == md5 [old pw] then create devise-style pw & salt, store it, and let them through to devise auth action
      if u.old_password == Digest::MD5.hexdigest(pw)

        set_devise_style_pw(u, pw)

      #if no match, give "invalid email or pw" message.
      else
        #flash[:notice] = "Sign in failed."
        flash[:notice] = t 'devise.failure.invalid'
        #render :new
        redirect_to new_user_session_path
      end

    end
  end
  def debug
    ap params
  end
end

不足しているものと、機能テストを介して新しいセッションをテストするにはどうすればよいですか?

4

1 に答える 1

0

機能テストではなく、統合テストを使用する必要があることがわかりました。理由は聞かないで...

于 2012-05-07T21:34:36.453 に答える