Skip to main content

rspec_let_vs_let_bang.md

🔄 Using let vs let! Effectively​

Use let to lazily evaluate expensive setup only when needed, and let! to eagerly create data before each example. This prevents unnecessary database hits while ensuring critical records exist. Always prefer let for speed, and switch to let! if you're testing side effects or callbacks triggered at setup time.

# Lazily created only when called
let(:user) { create(:user) }

it "doesn't hit the DB if not used" do
expect(User.count).to eq(0)
end

# Eager creation ensures it's present before example
let!(:post) { create(:post, author: user) }

it "counts the post" do
expect(Post.count).to eq(1)
end