Одна из сильных сторон RSpec заключается в том, что она предоставляет множество способов написания тестов, очистки тестов. Когда ваши тесты короткие и беспорядочные, становится легче сосредоточиться на ожидаемом поведении, а не на деталях написания тестов. Предметы RSpec — это еще один ярлык, позволяющий писать простые простые тесты.
Рассмотрим этот код —
class Person attr_reader :first_name, :last_name def initialize(first_name, last_name) @first_name = first_name @last_name = last_name end end describe Person do it 'create a new person with a first and last name' do person = Person.new 'John', 'Smith' expect(person).to have_attributes(first_name: 'John') expect(person).to have_attributes(last_name: 'Smith') end end
Это на самом деле довольно ясно, как есть, но мы могли бы использовать функцию субъекта RSpec, чтобы уменьшить количество кода в примере. Мы делаем это, перемещая экземпляр объекта person в строку описания.
class Person attr_reader :first_name, :last_name def initialize(first_name, last_name) @first_name = first_name @last_name = last_name end end describe Person.new 'John', 'Smith' do it { is_expected.to have_attributes(first_name: 'John') } it { is_expected.to have_attributes(last_name: 'Smith') } end
Когда вы запустите этот код, вы увидите этот вывод —
.. Finished in 0.003 seconds (files took 0.11201 seconds to load) 2 examples, 0 failures
Обратите внимание, насколько проще второй пример кода. Мы взяли один блок it в первом примере и заменили его двумя блоками it, которые в итоге требуют меньше кода и так же понятны.