考慮兩個模型:FactoryGirl如何創建一個由關聯創建回調
class User < ActiveRecord::Base
has_one :book
after_create :create_book
end
class Book < ActiveRecord::Base
belongs_to :user
validate_uniqueness :user_id
end
每個用戶都可以有且只能有一本書。然後,我在我的規格兩個廠區定義:
factory :user do
end
factory book do
user
end
那麼這裏的問題,當我爲Book
編寫測試,我想創建一個記錄book1
(姑且稱之爲)爲Book
,當我使用FactoryGirl.create(:book)
。它將創建一個Book
的實例,然後嘗試創建定義的關聯user
。創建用戶後,after_create
是觸發器,book2
是爲user
創建的。然後它試圖綁定book1
與user
,並被唯一性關聯阻止。
現在我正在使用book = FactoryGirl.create(:user).book
。這是最好的/正確的方式來做到這一點?我認爲它是如此直觀的說明,因爲我正在測試Book
,我認爲這將是最好的book = FactoryGirl.create(:book)
非常感謝。
好主意。但是我得到了'(NoMethodError)'的未定義方法'和_return''嘗試你的示例,我不知道爲什麼。但是我用'after(:build){| user | user.class.skip_callback(:create,:after,:create_book_for_user)}' –
larryzhao
是否包含'include RSpec :: Mocks :: ExampleMethods' in rails_helper.rb –
是的,對不起,我一開始就錯過了。我只是試着在''rails_helper.rb'中包含'include RSpec :: Mocks :: ExmpleMethods'。我仍然得到'NoMethodError:未定義的方法'allow'for#' –
larryzhao