Я хочу, чтобы Capybara заполнил форму для входа, нажмите «Войти» и перенаправьте меня на корневой путь следующим образом: (example). Это приложение - ваше классическое приложение для блога с Devise для аутентификации - я не могу придумать ничего другого, что повлияло бы на тест.Capybara & minitest - сеансы не работают
Я получил ошибку теста с ошибкой, поэтому я проверил правописание своей кнопки, экспериментировал с Warden и все еще не мог понять это. Для решения я хотел бы точно воспроизвести, как пользователь будет перемещаться по странице.
тест Интеграция:
require 'test_helper'
require 'database_cleaner'
class PostsTest < ActionDispatch::IntegrationTest
# for setup and tear down each time we run tests
self.use_transactional_fixtures = false
setup do
DatabaseCleaner.start
end
teardown do
DatabaseCleaner.clean
end
def setup
@post = posts(:valid_post)
@admin = users(:james)
@regular = users(:steve)
end
test 'display comments' do
assert @post.comments.first.body == 'hello'
end
test 'visit contact page' do
visit '/contact'
assert page.has_text?('jamesyoun710')
end
test 'login as admin' do
visit new_user_session_path
assert page.has_field?('Email', type: 'email')
fill_in('Email', with: '[email protected]')
fill_in('Password', with: 'gooneen44')
click_on('Log in') # this doesn't redirect me into the page
# login_as(@admin) # I need to do this to execute the line above
visit root_path
assert page.has_link?('Logout')
assert page.has_link?('New Post')
end
end
test_helper.rb
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
require "minitest/reporters"
require 'minitest/rails'
require 'capybara/rails'
require 'minitest/rails/capybara'
Minitest::Reporters.use!
# for creating sessions in tests
include Warden::Test::Helpers
Warden.test_mode!
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.yml for all tests in alphabetical order.
fixtures :all
end
class ActionController::TestCase
include Devise::TestHelpers
end
class ActionDispatch::IntegrationTest
include Capybara::DSL
end
Gemfile:
group :development, :test do
gem 'database_cleaner'
gem 'hirb'
gem 'byebug'
gem 'annotate'
gem 'web-console', '~> 2.0'
gem 'spring'
gem 'better_errors', '~> 2.1.1'
gem 'binding_of_caller', '~> 0.7.2'
end
group :test do
gem 'minitest-reporters', '1.0.5'
gem 'minitest-rails-capybara'
# gem 'mini_backtrace'
gem 'guard-minitest', '2.3.1'
end
В то время как его довольно заманчиво сквоить все в один тест, вы должны действительно следовать лучшим практикам и разделить его на одно утверждение на тестовый блок. Выполнение всего этого в одном тесте затрудняет (чтение невозможно), чтобы определить, что на самом деле не удается в вашем приложении. Подпись пользователя - это один тест. Создание сообщения - другое. – max
Спасибо Макс - я расщепим их, как ты и предложил. Для простоты я удалил лишние строки теста, чтобы сосредоточиться на логине. – eternal44