gab*_*lal 6 ruby rspec ruby-on-rails factory-bot
Auser有很多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
Run Code Online (Sandbox Code Playgroud)
它正常工作......当我打电话FactoryGirl.create(:user_with_comment),它会创建user和有关comment我的test db。
但是,我在以下方面面临一些问题controller_spec:
使用let我必须重新加载user才能看到comment:
let(:user) { FactoryGirl.create(:user_with_comment) }
user.comments.size #=>0
user.reload
user.comments.size #=>1
Run Code Online (Sandbox Code Playgroud)
一种解决方案是使用before(:each),但它会在每次测试之前创建venda和comment:
before(:each) do
@user = FactoryGirl.create(:user_with_comment)
end
@user.comments.size #=>1
Run Code Online (Sandbox Code Playgroud)
或者,我可以user在每次测试之前重新加载,但它也会命中数据库:
let(:user) { FactoryGirl.create(:user_with_comment) }
before(:each) do
user.reload
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下最好的方法是什么?
the*_*ler -5
这个怎么样?
let(:user) { FactoryGirl.create(:user_with_comment).reload }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2395 次 |
| 最近记录: |