Если мы поместим общий код в отдельный файл то у нас есть 2 метода которые помогут нам добавить этот функционал в наш тест. Пример есть в книге Rspec 3 стр. 176
Если обобщить:
it_behaves_like почти всегда то, что вам нужно. Это гарантирует, что содержимое общей группы не «просачивается» в окружающий контекст и не взаимодействует с другими вашими примерами удивительным образом.
Рекомендуем использовать include_examples только в том случае, если вы уверены, что контекст общей группы не будет конфликтовать ни с чем в окружающей группе, и у вас есть особая причина для его использования. Одна из таких причин — ясность: иногда выходные данные вашей спецификации (с использованием средства форматирования документации) будут читаться более разборчиво без дополнительной вложенности.
Так же мы можем передать блок, а не только аргумент в ‘it_behaves_like’ метод.
require 'tempfile'
RSpec.describe FileKVStore do
it_behaves_like 'KV store' do
let(:tempfile) { Tempfile.new('kv.store') }
let(:kv_store) { FileKVStore.new(tempfile.path) }
end
end
Code language: Ruby (ruby)