0

Я хочу, чтобы 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                                          
+0

В то время как его довольно заманчиво сквоить все в один тест, вы должны действительно следовать лучшим практикам и разделить его на одно утверждение на тестовый блок. Выполнение всего этого в одном тесте затрудняет (чтение невозможно), чтобы определить, что на самом деле не удается в вашем приложении. Подпись пользователя - это один тест. Создание сообщения - другое. – max

+0

Спасибо Макс - я расщепим их, как ты и предложил. Для простоты я удалил лишние строки теста, чтобы сосредоточиться на логине. – eternal44

ответ

0

Найдено решение - я должен был использовать информацию для входа из своих приборов (test db), но вместо этого я использовал информацию для входа из своей разработки db.

Смежные вопросы