【发布时间】:2015-02-12 16:31:48
【问题描述】:
一个user 有很多comments,所以我想有一个工厂user 和一个comment 关联(user_with_comment):
factory :user, class: User do |t|
...
factory :user_with_comment do |t|
after(:create) do |user|
FactoryGirl.create(:comment, user_id: user.id)
end
end
它工作正常...当我调用FactoryGirl.create(:user_with_comment) 时,它会在我的test db 中创建user 和相关的comment。
但是,我在controller_spec 中遇到了一些问题:
使用let 我必须重新加载user 才能看到comment:
let(:user) { FactoryGirl.create(:user_with_comment) }
user.comments.size #=>0
user.reload
user.comments.size #=>1
一种解决方案是使用before(:each),但它会在每次测试之前创建venda 和comment:
before(:each) do
@user = FactoryGirl.create(:user_with_comment)
end
@user.comments.size #=>1
或者,我可以在每次测试之前重新加载user,但它也会命中数据库:
let(:user) { FactoryGirl.create(:user_with_comment) }
before(:each) do
user.reload
end
在这种情况下最好的方法是什么?
【问题讨论】:
-
如果在一个例子中需要.. 那么
let是完美的。我想是的。
标签: ruby-on-rails ruby rspec factory-bot