Skip to content

Instantly share code, notes, and snippets.

@pdabrowski6
Created February 10, 2018 03:53
Show Gist options
  • Save pdabrowski6/1c8bcc39d5067e7e2d7304369255f265 to your computer and use it in GitHub Desktop.
Save pdabrowski6/1c8bcc39d5067e7e2d7304369255f265 to your computer and use it in GitHub Desktop.
Avoid let and before blocks in your test when you don't really have to use them
# user.rb file
class User
attr_reader :admin
def initialize(admin: false)
@admin = admin
end
end
# user_service.rb file
class UserService
def initialize(user:)
@user = user
end
def name
if user.admin
"ADMIN username"
else
"username"
end
end
private
attr_accessor :user
end
# Benchmarks using https://github.com/SamSaffron/memory_profiler gem
require './user'
require './user_service'
require 'memory_profiler'
report = MemoryProfiler.report do
describe UserService do
describe '#name' do
it 'returns username with admin prefix when user is admin' do
user = User.new(admin: true)
user_service = UserService.new(user: user)
expect(user_service.name).to eq('ADMIN username')
end
it 'returns username' do
user = User.new(admin: false)
user_service = UserService.new(user: user)
expect(user_service.name).to eq('username')
end
end
# describe '#name' do
# let(:user_service) { UserService.new(user: user) }
# let(:user) { User.new }
# before do
# allow(user).to receive(:admin).and_return(admin_user)
# end
# context 'when user is admin' do
# let(:admin_user) { true }
# it 'returns username with admin prefix' do
# expect(user_service.name).to eq('ADMIN username')
# end
# end
# context 'when user is not admin' do
# let(:admin_user) { false }
# it 'returns username without admin prefix' do
# expect(user_service.name).to eq('username')
# end
# end
# end
end
end
report.pretty_print
@pdabrowski6
Copy link
Author

Version with let and before:

Total allocated: 1970221 bytes (20907 objects)
Total retained:  285854 bytes (2434 objects)

Version without let and before:

Total allocated: 1950093 bytes (20722 objects) (1,02% less)
Total retained:  274904 bytes (2367 objects) (3,83% less)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment