2

私は Authlogic と Rails 3.2.3 を使用しています。Authlogic は開発モードでユーザーを正しく検証し、登録後にアクティブなユーザーでログインできますが、テスト モードで Capybara との統合テストを実行するとpassword is not validエラーが発生します。

パスワードが同じでアクティブであることを確認し、設定も試みました


  acts_as_authentic do |c|
   c.validate_password_field = false
  end 

私のテストではファクトリーを使用しています。これが私のファクトリー定義です。


FactoryGirl.define do
  factory :user do
    sequence :email do |i| 
      "test_user_#{i}@example.com"
    end
    sequence :name do 
      |i| "test user#{i}"
    end
    password "testtesttest"
    password_confirmation "testtesttest"
    password_salt "passwordsalt"
    perishable_token "windowintheskies"
    single_access_token "123123123"
  end  
end

私のデータベース フィールドはすべて、Varchar(255) である crypted_pa​​ssword フィールドを許可します。


+---------------------+--------------+------+-----+---------+----------------+
| Field               | Type         | Null | Key | Default | Extra          |
+---------------------+--------------+------+-----+---------+----------------+
| id                  | int(11)      | NO   | PRI | NULL    | auto_increment |
| crypted_password    | varchar(255) | NO   |     | NULL    |                |
| password_salt       | varchar(255) | NO   |     | NULL    |                |
| email               | varchar(255) | NO   |     | NULL    |                |
| persistence_token   | varchar(255) | NO   |     | NULL    |                |
| single_access_token | varchar(255) | NO   |     | NULL    |                |
| perishable_token    | varchar(255) | NO   |     | NULL    |                |
| login_count         | int(11)      | NO   |     | 0       |                |
| failed_login_count  | int(11)      | NO   |     | 0       |                |
| last_request_at     | datetime     | YES  |     | NULL    |                |
| current_login_at    | datetime     | YES  |     | NULL    |                |
| last_login_at       | datetime     | YES  |     | NULL    |                |
| current_login_ip    | varchar(255) | YES  |     | NULL    |                |
| last_login_ip       | varchar(255) | YES  |     | NULL    |                |
| name                | varchar(255) | NO   |     |         |                |
| created_at          | datetime     | NO   |     | NULL    |                |
| updated_at          | datetime     | NO   |     | NULL    |                |
| active              | tinyint(1)   | YES  |     | 0       |                |
+---------------------+--------------+------+-----+---------+----------------+


カピバラを使用して統合テストを実行していますが、開発モードではなくテストモードでのみエラーが発生することがわかりました。

また、パスワードが空白ではないことを確信しています

私の統合テスト仕様は次のようになります


require 'spec_helper'
describe "/lists" do    
  before(:each) do        
    @user = FactoryGirl.build(:user, :password => 'testtesttest', :password_confirmation => 'testtesttest') 
    @user.activate!    
  end

  it "loads the list creation pages on clicking the new list button" do    
    visit new_user_session_path
    fill_in "user_session_email", :with => @user.email
    fill_in "user_session_password", :with => 'testtesttest'
    click_button "Login"
    page.should have_content "My Lists"        
    visit lists_path
    click_link "Create A New List"
    page.should have_content('New List')
  end      

私の user_sessions_controller は次のようになります



  def create
    @user_session = UserSession.new(params[:user_session])
    puts "*" * 50
    puts " Password - #{params[:user_session][:password].to_s}"
    puts " User #{User.where(:email => params[:user_session][:email]).first.inspect}"
    puts "Valid #{User.where(:email => params[:user_session][:email]).first.valid_password?(params[:user_session][:password])}"
    puts " Active =  #{User.where(:email => params[:user_session][:email]).first.active?}"
    puts "*" * 50
    if @user_session.save!
      flash[:notice] = "Login successful!"
      redirect_back_or_default lists_url
    else                          
      puts "Error : #{@user_session.errors.inspect}"
      render :action => :new
    end
  end

4

0 に答える 0