是否可以在Factory Girl工厂中定义一个不在关联的Active :: Record模型中的方法?1

时间:2014-01-06 20:16:33

标签: ruby-on-rails rspec factory-bot

所以我有一家工厂:

factory :person do
    password_string { Faker::Lorem.words(3).join }

    after(:create) do |object|
      object.password = object.password_hash(object.password_string)
      object.save!
    end   
end

我收到错误:

NoMethodError:
       undefined method `password_string=' for #<Person:0xe1cdf00>

这是预期的,但我想为我的测试环境定义password_string(主要是因为我可以模拟已登录的用户)。有没有办法通过定义工厂独有的属性来绕过NoMethodError?

谢谢,

1 个答案:

答案 0 :(得分:3)

是的,你可以!通常你会把它们放在一个特性上,不确定你是否可以将它们放在一个普通的工厂上。

trait :with_password_string do
  ignore do
    password_string nil
  end

  after(:build) do |content, evaluator|
    if evaluator.password_string
      content.password = content.password_hash(evaluator.password_string)
    end
  end
end