0

Railsに姓(デバッグ情報)を出力するsetterメソッドがあります。

def password=(new_password)

    logger.info 'DEBUG: self.lastname: ' + self.lastname

    self.password_hash = SCrypt::Password.create(new_password, :key_len => 512, :salt_size => 32)


end

コンソール(開発環境またはテスト環境)を使用すると、次のようになります。

2.0.0p0 :001 > u = User.new
 => #<User uuid: nil, account_id: nil, username_id: nil, password_hash: "", can_login: true, firstname: "", lastname: "", phone: "", mobile: "", fax: "", role: 0, created_at: nil, updated_at: nil>
2.0.0p0 :002 > u.lastname = "some lastname"
 => "some lastname"
2.0.0p0 :003 > u.password = "test"
DEBUG: self.lastname: some lastname
=> "test"

ただし、RSpecテストを実行し、log / test.logとgrepをDEBUGに合わせると、次のようになります。

DEBUG: self.lastname:

RSpecテストで姓にアクセスできないかのように(ユーザーモデルのRSpecテストです)。それはRSpecのバグですか、それともここで何が間違っているのですか?

工場定義は次のとおりです。

FactoryGirl.define do
  factory :user do
    account
    current_username 'user@domain.com'
    password 'iTho6chi'
    can_login true
    firstname 'John'
    lastname 'Doe'
    phone '555-1234'
    mobile '555-4321'
    fax '555-4321'
  end
end

と:

require 'spec_helper'

describe User do

  it 'should create a new user using the FactoryGirl registration of user' do

    FactoryGirl.create(:user).should be_valid

  end

end

与える:

Finished in 0.376 seconds
1 example, 0 failures

test.logファイルは次のようになります。

DEBUG: self.lastname:

(姓はどこでも設定解除されておらず、モデルで設定する必要があるため、テストに合格してから設定されます)

4

1 に答える 1

0

これは、FactoryGirlで定義している順序に関係しているようです。姓を設定する前にパスワードを設定するため、password=メソッドを呼び出す時点では、lastname属性はnilです。

順序を変更すると、予想されるデバッグ情報が表示されます。

于 2013-03-26T17:38:14.773 に答える