#rspec #rspec-rails
#rspec #rspec-rails
Вопрос:
У меня есть несколько спецификаций просмотра: редактировать, индексировать, создавать, показывать для данного контроллера Rails (3), и я хотел бы, чтобы часть стандартного кода настройки была разделена между ними. Я бы хотел избежать размещения его в файле spec_helper.rb. Есть идеи?
Чтобы быть более конкретным, в спецификации / представлениях / шагах у меня есть четыре файла: {редактировать, создать, показать, индекс}.html.erb_spec.rb. Я хотел бы, чтобы они поделились некоторым кодом, таким как
let(:workflow) do
document = Factory.create(:document)
document.user = user
document.save!
document.workflow
end
Например — точный код не имеет значения. Я хотел бы сделать это, не помещая его в spec_helper.rb.
Ответ №1:
Вы обнаружите, что в rspec есть именно то, что нужно для этого: общий контекст.
Это позволит вам сделать что-то вроде этого
shared_context 'workflow' do
let(:workflow) do
document = Factory.create(:document)
document.user = user
document.save!
document.workflow
end
end
Если вам нужно разделить это между разными файлами спецификаций, запишите это в файл, который вы храните внутри spec/support
. Затем в своем тесте вы можете написать:
describe 'Something' do
include_context 'workflow'
it 'behaves correctly' do
...
end
end
Надеюсь, это поможет.
Комментарии:
1. обратите внимание, что
spec/support
папка — это просто соглашение, и Rspec не будет автоматически запрашивать файлы из нее, поэтому вам нужноrequire 'spec/support/filey'
2. Верно. Обычно я включаю следующую строку в свой
rails_helper.rb
(раньше это был spec_helper) :Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
Ответ №2:
Может быть, вы могли бы использовать shared context
:https://www.relishapp.com/rspec/rspec-core/docs/example-groups/shared-context