Подтвердить что ты не робот

Соглашения об именах RSpec для файлов и структуры каталогов

Я пишу тесты RSpec, и я пришел к выводу, что не читаю те же мнения на разных сайтах. Структура каталогов для RSpec ясна, когда мы имеем дело со спецификациями/контроллерами и каталогами спецификаций/моделей, но противоречивая информация, которую я получаю, касается тестирования просмотров.

Я хотел бы просто поставить эти тесты в каталог spec/integration/, но я прочитал, что он должен быть в spec/integration, но в другой книге говорится о спецификациях/запросах. Это имеет значение?

Чтобы еще больше усложнить ситуацию, я прочитал противоречивую информацию о наименовании фактических имен файлов тестов! Например, если у меня был каталог controller/model/view с именем "people" (я использую haml), я должен назвать такие файлы следующим образом:

Спецификация/интеграция/people.html.haml_spec.rb

Однако другая книга предлагает следующее:

спецификации/запросы/people_spec.rb

Я хотел бы немного пояснить соглашения об именах в RSpec и ПОЧЕМУ я должен назвать те тесты конкретных имен, а также вопрос о том, нужно ли их помещать в спецификацию/интеграцию или спецификации/запросы. Мне кажется, что я иду с ветром здесь.

Любая помощь очень ценится.

4b9b3361

Ответ 1

Проверьте даты книг и версии RSpec, для которых они были написаны. Структура именования со временем изменилась незначительно.

В соответствии с документами для rspec-rails спецификации запроса могут идти в spec/request, spec/api или spec/integration. Я предпочитаю вводить спецификации запроса в spec/request.

Чтобы сделать вещи более интересными, если вы используете Capybara с rspec-rails, он будет работать со спецификациями/запросами для Capybara 1.x и spec/features для Capybara 2.

Что касается отдельных имен файлов спецификаций, когда есть определенный тест класса, например, модель Rails, вы должны использовать аналогичное имя файла спецификации:

app/models/user.rbspec/models/user_spec.rb

Просмотр спецификаций должен использовать имя шаблона:

app/views/users/index.html.erbspec/views/users/index.html.erb_spec.rb

Модели с именами должны включать пространство имен в пути к файлам спецификаций:

app/models/admin/user.rbspec/models/admin/user_spec.rb

Генератор эхолота RSpec является хорошим ориентиром для показа, где эти спецификации принадлежат.

Если нет определенного теста класса, как в случае с спецификациями запросов, IMHO вы должны иметь право использовать имя, которое описывает тестируемую вещь. Например. spec/requests/place_an_order_spec.rb.

Ответ 2

Файлы, считываемые rspec gem, это просто те, которые заканчиваются на _spec.rb и которые находятся где угодно в иерархии ниже папки spec, пока вершина иерархии является буквенно-цифровым словом (то есть, файлы под папкой с именем spec/##/ не будут учитываться при генерации спецификаций.) Это соответствующая строка кода, которая реализует это, в /gems/rspec-rails-2.14.1/lib/rspec/rails/tasks/rspec.rake:

namespace :spec do
  types = begin
    dirs = Dir['./spec/**/*_spec.rb'].
           map { |f| g=f.sub(/^\.\/(spec\/\w+)\/.*/, '\\1') ; puts ">>> Found #{g}."; g }.
           uniq.
           select { |f| File.directory?(f) }
    Hash[dirs.map { |d| [d.split('/').last, d] }]
  end

Итак, весь текст в имени файла, предшествующий _spec.rb, является соглашением - он не изменяет способ обработки Rails файлов.

Мне нужно будет прочитать код намного больше, чтобы понять, какое значение имеет имя каждой папки под spec, - оно передается в создаваемую задачу Rake spec, поэтому она используется для что-то, но я не знаю, что.