我正在尝试使用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)。
当我将数据保存到数据库时,有谁知道为什么我得到了错误的状态值?
答案 0 :(得分:0)
如果:
card = build(:active_card)
您刚刚构建了未保存活动记录到db,因此字段state
完全由工厂声明控制,但以防:
card = create(:active_card)
您已构建并已保存以对活动记录进行db。因此,字段state
可以通过状态机,验证或该模型的任何其他代码进行更改。只要记住你的想法。