2014-12-13 72 views
2

我想使用FactoryGirl运行一些RSpec测试。工厂女孩属性创建vs构建

我有一个卡模型,可以处于以下状态之一: 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(NEW)。

当我尝试,

card = build(:active_card), 

卡的状态的属性是等于1(ACTIVE)如预期。

有没有人知道为什么当我将数据保存到我的数据库时,为什么会出现错误的状态值?

回答

0

在以下情况下:

​​

你刚刚得到了建立和不保存活动记录到数据库,等等领域state是相当充分的工厂宣布控制,但万一:

card = create(:active_card) 

你已经建好了,并且保存了以db为活动记录。因此,字段state可以通过状态机,验证或该模型的任何其他代码进行更改。只要在你的脑海里消瘦。

+0

非常感谢!我的卡模型中有以下钩子: 'before_validation:initialize_state,on :: create',它将状态设置为Card :: NEW。 我只是打电话给我的卡#skip_initialization_state!方法在我的工厂定义之前(:create)。 再次感谢! – davalidator 2014-12-15 15:15:29