Ответ 1
Как и в случае rspec 2.6, общие примеры являются глобальными. Вы можете объявить их в группе примеров, но они не привязаны к этой группе.
Это застало меня врасплох...
Кажется, вы не можете использовать одно и то же имя для 2 групп общих разделов rspec в любом месте вашего проекта. Если вы это сделаете, то при запуске rake spec
(для запуска всех спецификаций) rspec жалуется, что группа с общим примером была объявлена с уникальным именем.
Это происходит даже тогда, когда вызовы shared_examples_for
содержатся в описываемом блоке (можно было бы предположить, что должны охватывать примеры).
Сначала я попытался обойти это, изменив имена групп примеров (не идеально, но я могу жить с ним).
Но это стало скорее проблемой, когда я хотел разделить группу примеров на отдельный файл, чтобы я мог поделиться им между несколькими файлами spec.
Спецификации работают нормально, когда выполняются изолированно, но когда я запускаю пакет, rspec жалуется.
`ensure_shared_example_group_name_not_taken': \
Shared example group 'a person' already exists (ArgumentError)
Конечно, это обычная проблема.
Есть ли что-то, что здесь отсутствует?
Как и в случае rspec 2.6, общие примеры являются глобальными. Вы можете объявить их в группе примеров, но они не привязаны к этой группе.
В официальной документации есть несколько советов о том, как лучше всего справиться с этим:
https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-examples
TL; DR
Да, общие примеры являются глобальными. Лучшая практика для Ruby On Rails: поместите общие примеры в spec/support/foo_bar_shared_examples.rb и просто начните писать shared_example
прямо, без упаковки в любом блоке describe
или иначе.