Блог Половнёва

Впихнуть все в expect

Иногда в тестах можно увидеть такое:

expect(described_class.new(at: Time.new(2019, 7, 7, 9, 15)).to_human).to eq "9:15"

Строка получается слишком длинной, Рубокоп ругается, разработчик «исправляет»:

expect(
  described_class.new(at: Time.new(2019, 7, 7, 9, 15)).to_human
).to eq "9:00"

Это, конечно, ерунда. Симптомы вылечили, а болезнь осталась: в expect() происходит слишком много. Лучше так:

nine_in_the_morning = Time.new(2019, 7, 7, 9, 15)
alarm = described_class.new(at: nine_in_the_morning)

expect(alarm.to_human).to eq "9:15"

А если убрать несущественные для теста детали — год, месяц и день — станет еще лучше:

nine_in_the_morning = Time.now.change(hour: 9, min: 15)
alarm = described_class.new(at: nine_in_the_morning)

expect(alarm.to_human).to eq "9:15"

P. S. Ещё больше постов о программировании, тестах и культуре разработки у меня в Телеграме.