Учебники

RSpec — Предметы

Одна из сильных сторон 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, которые в итоге требуют меньше кода и так же понятны.