Factory Girl属性create vs build

时间:2014-12-13 18:00:13

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

我正在尝试使用FactoryGirl运行一些RSpec测试。

我有一个可以处于以下状态之一的卡片模型: NEW,ACTIVE,INACTIVE,我分别编号为0,1和2。

我已经定义了我的卡和active_card工厂:

factory :card do
  sequence(:uid) { |n| "UID_#{n}" }
  state Card::NEW

  factory :active_card do
    state Card::ACTIVE
    activated_at { Faker::Time.between(12.months.ago, 9.months.ago) }
  end
end

在我的测试中,我尝试过:

card = create(:active_card)

和我的调试声明

puts card.to_json

吐出卡的状态属性等于0(新)。

当我尝试时,

card = build(:active_card),

card的state属性按预期等于1(ACTIVE)。

当我将数据保存到数据库时,有谁知道为什么我得到了错误的状态值?

1 个答案:

答案 0 :(得分:0)

如果:

card = build(:active_card)

您刚刚构建了未保存活动记录到db,因此字段state完全由工厂声明控制,但以防:

card = create(:active_card)

您已构建并已保存以对活动记录进行db。因此,字段state可以通过状态机,验证或该模型的任何其他代码进行更改。只要记住你的想法。