Sintaxe Sugar para definir métodos auxiliares de teste

Eu prefiro o Ruby Test :: Unit em vez do RSpec, mas uma das coisas que gosto no RSpec é o método let . Ele permite que você crie métodos auxiliares memoized em seus testes.

Esta é uma maneira de fazer isso em Test :: Unit:

class Test::Unit::TestCase
def self.let(name, &block)
ivar
= "@#{name}"
self.class_eval do
define_method
(name) do
if instance_variable_defined?(ivar)
instance_variable_get
(ivar)
else
value = self.instance_eval(&block)
instance_variable_set
(ivar, value)
end
end
end
end
end

Agora, em vez de escrever métodos auxiliares em seus testes como este …

class EmployeeTest < Test::Unit::TestCase
def test_employee_has_an_email
assert_equal
('jdoe@example.com', employee.email)
end

private

def employee
@employee ||= Employee.new('jdoe@example.com')
end
end

Você pode usar “let” assim …

class EmployeeTest < Test::Unit::TestCase
let(:employee) { Employee.new('jdoe@example.com') }

def test_employee_has_an_email
assert_equal
('jdoe@example.com', employee.email)
end
end