如何重新加载由 let 定义的变量

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),但它会在每次测试之前创建vendacomment

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)