RSpec - Предметы
Одна из сильных сторон RSpec заключается в том, что он предоставляет множество способов написания тестов, чистых тестов. Когда ваши тесты короткие и лаконичные, становится легче сосредоточиться на ожидаемом поведении, а не на деталях написания тестов. RSpec Subjects - еще один ярлык, позволяющий писать простые простые тесты.
Рассмотрим этот код -
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 block в первом примере и заменил его двумя it blocks которые в конечном итоге требуют меньше кода и столь же понятны.