Skip to main content

let_lazy_loaded_dependencies

💡 Lazy-Load Expensive Dependencies via Let​

let and let! help you control initialization timing for expensive objects like external API wrappers. Use let for on-demand instantiation and let! when you need eager setup. This approach reduces test startup time and avoids unnecessary resource usage.

# Lazy-loaded service client
let(:payment_gateway) do
PaymentGateway.new(endpoint: 'https://api.pay', timeout: 5)
end

it 'charges the user only when needed' do
expect(payment_gateway).to receive(:charge).with(100)
OrderProcessor.new.charge_user(100)
end

# Eager setup for database seed
let!(:default_roles) { Role.seed_defaults }