Не тестируйте attr_reader/_writer/_accessor
Регулярно встречаю тесты, в которых проверяют attr_reader:
class Alarm
attr_reader :at
def initialize(at: )
@at = at
end
def snooze
# ...
end
end
RSpec.describe Alarm do
describe "#at" do
it "returns alarm time" do
time = Time.now
alarm = described_class.new(at: time)
expect(alarm.at).to eq time
end
end
end
Это, конечно, бесполезно. Во-первых, так мы тестируем стандартную библиотеку — штуку, у которой уже есть собственные тесты. Зачем ей еще тесты?
Во-вторых, в таких тестах нет пользы, они проверяют тривиальное поведение.
В-третьих, геттер (Alarm#at) мы косвенно проверим в других тестах:
describe "#snooze" do
it "snoozes alarm for nine minutes" do
# ...
expect { alarm.snooze }.to change { alarm.at }.by(9.minutes)
end
end
P. S. ПРОТИП: если attr_reader нужен только самому объекту, его лучше сделать приватным:
private
attr_reader :repeat
P. S. Ещё больше постов о программировании, тестах и культуре разработки у меня в Телеграме.