2014-12-13 71 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