假設我有模型User
和Post
,用戶has_many
帖子和帖子belongs_to
用戶。使用FactoryGirl加速模型規格中的關聯 - 創建vs構建vs build_stubbed
當我寫Post
一個規範,我的第一直覺就是寫這樣的:
before do
@user = FactoryGirl.create :user
@post = @user.posts.new(title: "Foo", content: "bar)
end
... tests for @post go here ...
但是,這將創建一個新的用戶 - 命中數據庫 - 爲每一個測試,這是要放慢速度。有沒有更好的方法來做到這一點,這將加快我的測試,並避免經常碰到數據庫?
據我瞭解,我不能用FactoryGirl.build :user
,因爲,即使它不會碰到DB,該協會將不能正常工作,因爲@user
不會有一個ID,因此@post.user
將無法正常工作(它返回nil
)
我可以用FactoryGirl.build_stubbed :user
它創造了一個「假堅持」 @user
裏面確實有一個ID,但仍@post.user
返回nil。當我測試與協會相關的事情時,build_stubbed
與build
有什麼實際優勢?
我想我可以使用build_stubbed
存根@post.user
所以它返回@user
......有什麼理由這可能是一個壞主意?
或者我應該只使用create
並接受速度命中?
我能想到的唯一另一種方法是在before(:all)
塊中設置@user,這似乎是一個糟糕的主意。
以簡潔明瞭的方式編寫這些測試的最佳方式是什麼,避免了太多的數據庫查詢?