Nói rằng tôi có mô hình User
và Post
, người dùng has_many
bài viết và bài belongs_to
người dùng.Đẩy mạnh các hiệp hội trong thông số kỹ thuật mô hình với FactoryGirl - tạo vs xây dựng vs build_stubbed
Khi tôi viết một spec cho Post
, bản năng đầu tiên của tôi là viết một cái gì đó như thế này:
before do
@user = FactoryGirl.create :user
@post = @user.posts.new(title: "Foo", content: "bar)
end
... tests for @post go here ...
Nhưng điều này sẽ tạo ra một tài khoản mới - nhấn cơ sở dữ liệu - cho mỗi thử nghiệm duy nhất, đó là sẽ làm chậm mọi thứ. Có cách nào tốt hơn để làm điều này mà sẽ tăng tốc độ kiểm tra của tôi lên và tránh đánh DB thường xuyên?
Như tôi đã hiểu, tôi không thể sử dụng FactoryGirl.build :user
vì, mặc dù nó sẽ không nhấn DB, các hiệp hội sẽ không hoạt động bình thường vì @user
sẽ không có ID và vì vậy @post.user
sẽ không hoạt động (nó trả nil
.)
tôi có thể sử dụng FactoryGirl.build_stubbed :user
đó tạo ra một "giả vẫn kiên trì" @user
mà không có một ID, nhưng @post.user
vẫn trả về nil. build_stubbed
có lợi thế thực tế nào trên build
khi tôi đang thử nghiệm những thứ liên quan đến các hiệp hội không?
Tôi cho rằng tôi có thể sử dụng build_stubbed
stub @post.user
để trả về @user
... có bất kỳ lý do nào có thể là ý tưởng tồi không?
Hoặc tôi chỉ nên sử dụng create
và chấp nhận tốc độ truy cập?
Cách thay thế duy nhất khác mà tôi có thể nghĩ là thiết lập @user trong khối before(:all)
có vẻ như là một ý tưởng tồi.
Cách tốt nhất để viết các loại thử nghiệm này theo cách gọn gàng, súc tích mà tránh tạo quá nhiều truy vấn DB là gì?