Я настроил простой контроллер с соответствующим ему feature_spec:
stamps_controller.rb
class StampsController < ApplicationController
def new
@stamp = Stamp.new
end
def create
@stamp = Stamp.new(stamp_params)
if @stamp.save
redirect_to(stamp_url(@stamp.id), status: 201)
else
render 'new'
end
end
def show
@stamp = Stamp.find(params[:id])
end
private
def stamp_params
params.require(:stamp).permit(::percentage)
end
end
specs/requests/stamps_request_spec.rb
RSpec.describe 'stamp requests', type: :request do
describe 'stamp creation', js: true do
before do
FactoryBot.create_list(:domain, 2)
FactoryBot.create_list(:label, 2)
end
it 'allows users to create new stamps' do
visit new_stamp_path
expect(page).to have_content('Percentage')
find('#stamp_percentage').set('20')
click_button 'Create'
expect(current_path).to eq(stamp_path(Stamp.first.id))
end
end
end
Согласно документам капибары:
Capybara автоматически выполняет любые перенаправления и отправляет формы, связанные с кнопками.
Но в тесте этого не происходит, вместо этого выдает ошибку:
ожидается: /штампы/1
получил: /штампы
Результаты очевидны: он успешно создает штамп, но не может перенаправить на новый штамп. Я также подтвердил это, используя binding.pry
.
Почему капибара не следует перенаправлению, как описано в документах?
Примечания:
- это даже не работает, если я использую обычный драйвер вместо js
- Я просмотрел множество вопросов и документов SO, но не нашел ничего полезного. Одной потенциальной попыткой, которую я не смог понять, был ответ с никаких подробностей о том, как это реализовать.
- мои конфиги:
support/capybara.rb
require 'capybara/rails'
require 'capybara/rspec'
Capybara.server = :puma
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, browser: :firefox, marionette: true)
end
Capybara.javascript_driver = :selenium
RSpec.configure do |config|
config.include Capybara::DSL
end
spec_helper.rb
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
require 'rspec/rails'
require 'factory_bot_rails'
require 'pundit/matchers'
Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
RSpec.configure do |config|
# .
# unrelated stuff
# .
end
sleep(2)
перед ожиданием). Мой браузер зависает на imgur.com/a/XoWhP0R - улучшения структуры еще не сделаны, но я сомневаюсь, что многое изменится 22.08.2018