Я новичок в Rspec, но мне удалось собрать рабочую (по крайней мере, в моих тестах) настройку, которая позволяет мне тестировать различные поведение в зарегистрированных/выведенных из системы состояниях с помощью помощников FactoryGirl + Devise и Warden. Поток выполняет следующие основные этапы:Как подписать пользователей для тестирования с помощью Rspec + Devise + FactoryGirl
- Factory девушка определяет общий пользователя
- Каждый тестовый блок, который требует входа использует ранее (: каждый) крюк, чтобы подписать пользователей в
- rails_helper конфигурации срывает входа пользователя после каждого теста с после: каждый крюк
Я искал много примеров кода, чтобы получить эту работу, но мне еще предстоит найти полный раунд и хотя я знаю, что это работает в моей настройке , Мне интересно, правильно ли это, в частности, я дублирую что-то ненужное (например, пользовательский знак в срывах) или создание будущего непредвиденного поведения.
Вот соответствующий код для каждого шага и испытания образца:
спецификации/factories.rb
FactoryGirl.define do
factory :user do
sequence(:name) { |n| "person #{n}"}
sequence(:email) { |n| "person#{n}@example.com" }
password 'foobar'
password_confirmation 'foobar'
confirmed_at Time.now
sequence(:id) { |n| n }
end
end
спецификации/rails_helper.rb
...
# Add login/logout helpers from Devise
config.include Devise::Test::ControllerHelpers, type: :controller
config.include Devise::Test::ControllerHelpers, type: :view
# Include Warden test helpers specifically for login/logout
config.include Warden::Test::Helpers
# Add capybara DSL
config.include Capybara::DSL
# Tear down signed in user after each test
config.after :each do
Warden.test_reset!
end
SPEC/просмотров/static_pages (испытание образца)
RSpec.describe 'static_pages home, signed in', type: :view do
before(:each) do
@user = build(:user)
login_as(@user)
end
it 'should display the correct links when signed in' do
visit root_path
# links which persist in both states
expect(page).to have_link('Site Title', href: root_path, count: 1)
# links which drop out after login
expect(page).not_to have_link('Login', href: new_user_session_path)
expect(page).not_to have_link('Join', href: signup_path)
# links which are added after login
expect(page).to have_link('Add Item', href: new_item_path)
expect(page).to have_link('My Items', href: myitems_path)
end
end
Что у вас хорошо выглядит. Я не уверен, что означает «кругосветное путешествие» в вашем контексте. FWIW, взгляните на [Тест функции RSPec] (https://www.relishapp.com/rspec/rspec-rails/docs/feature-specs/feature-spec). Это поддерживаемый механизм для общего дела, которое вы планируете делать, то есть тестирование на уровне объектов. –
Это хороший совет, спасибо :) – oneWorkingHeadphone