RSpec测试和控制台之间不匹配

时间:2013-03-26 17:07:45

标签: ruby-on-rails ruby-on-rails-3 rspec ruby-on-rails-3.2

我在Rails中有一个setter方法,它打印出一个lastname(调试信息):

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 for 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:

(姓氏没有在任何地方取消设置,需要在模型中设置,因此在测试通过后设置它)

1 个答案:

答案 0 :(得分:0)

看起来这与您在FactoryGirl中定义事物的顺序有关。您在设置姓氏之前设置了密码,因此在调用password=方法时,lastname属性为零。

如果您更改了订单,您将看到预期的调试信息。