2013-07-12 120 views
0

這是對這個問題的後續:Factory_Girl not generating unique recordsFactoryGirl不保存記錄

之所以沒有被創建的記錄要求,是因爲未正確創建的用戶記錄(或至少協會)。

鑑於以下工廠:

factory :user do 
    sequence(:name) { |n| "foo#{n}" } 
    password "fooBar_1" 
    email { "#{name}@example.com" } 
    app_setting 
    factory :adminUser do |user| 
    user.role_assignments { |ra| [ra.association(:adminAssignment)] } 
    end 
    factory :reader do |user| 
    user.role_assignments { |ra| [ra.association(:readerAssignment)] } 
    end 
end 

factory :role_assignment do 
    factory :adminAssignment do |ra| 
    ra.association :role, factory: :adminRole 
    end 
    factory :readerAssignment do 
    association :role 
    end 
end 

factory :role do 
    roleName "reader" 
    factory :adminRole do |r| 
    r.roleName "Administrator" 
    end 
end 

下面的代碼片段中,應該產生與相關role_assignment記錄用戶與「管理員」

user = FactoryGirl.create(:adminUser) 

的角色名稱相關的角色記錄這實際上將在rails控制檯中工作 - 記錄按預期在數據庫中創建。但是,在安裝過程中執行代碼行時,記錄不會保存,並且依賴角色分配的測試將失敗。

任何有關如何查看記錄未被提交的建議?

回答

1

事實證明,工廠在Rails控制檯中工作不太好。雖然記錄是在所有正確的表格中創建的,但role_assignment記錄對於用戶標識沒有。顯然我用來處理相關問題的格式不正確。

正確的格式來自https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md,並且如下(我的情況):

factory :user do 
sequence(:name) { |n| "foo#{n}" } 
    password "fooBar_1" 
    email { "#{name}@example.com" } 
    app_setting 
factory :adminUser do 
    after(:create) do |user, evaluator| 
    FactoryGirl.create_list(:adminAssignment, 1, user: user) 
    end 
end 

我仍然需要清理用戶工廠的其它部分,所以在這裏我沒有包括他們。這將創建用戶,然後創建角色和角色分配,然後正確鏈接。

我的其他問題實際上是因爲我正在對應用程序進行重大改造,並且在編寫工廠之前沒有回顧需求模型中的作用域定義,所以我創建的記錄永遠不會在適用範圍。哎呀。