Skip to content

2017_03 Pasar pruebas request de rspec a pruebas de integración con minitest

Vladimir Támara Patiño edited this page Sep 3, 2020 · 1 revision

Para convertir las pruebas que usan rspec+capybara+capybara-webkit a minitest+capybara+poltergeist+phantomjs

Instale phantomjs (hace parte de adJ 6.0)

En el Gemfile, en la sección de pruebas quite la gema rspec-rails y agregue:

gem "connection_pool"
gem "poltergeist" 
gem 'minitest-rails-capybara'

Cree el directorio test/integration y en test/test_helper.rb ubique el siguiente contenido:

# encoding: utf-8

ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'

require "minitest/rails/capybara"
require "capybara/rails"
require "capybara/poltergeist"
Capybara.javascript_driver = :poltergeist

class ActiveSupport::TestCase
  ActiveRecord::Migration.check_pending!

  fixtures :all
end

class ActionDispatch::IntegrationTest
  # Ver http://www.rubytutorial.io/how-to-test-an-autocomplete-with-rails/
  include Capybara::DSL

  require 'capybara/poltergeist'

  Capybara.javascript_driver = :poltergeist

  def teardown
    Capybara.current_driver = nil
  end
end

class ActiveRecord::Base
   # Ver https://gist.github.com/mperham/3049152
   mattr_accessor :shared_connection
   @@shared_connection = nil

   def self.connection
     @@shared_connection || ConnectionPool::Wrapper.new(:size => 1) { retrieve_connection }
  end
end
ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection

Copie las pruebas de rspec/request a test/integration y modifíquelas teniendo en cuenta:

  • Cambiar el nombre del archivo. Por ejemplo si era rspec/request/acceso_spec.rb debe quedar como test/integration/acceso_test.rb
  • Cambie require 'spec_helper' por require 'test_helper'
  • Ponga todas las pruebas dentro de una clase:
class AccesoTest < Capybara::Rails::TestCase 
  ...
end
  • Quite los describe
  • Cambie los it por test por ejemplo en lugar de it "puede crear caso" do queda test "puede crear caso" do
  • Cambie verificaciones del estilo expect(page).to_have_content('Administrar') por assert page.has_content?('Administrar')

En lugar de rspec las pruebas se ejecutan con rails test que opcionalmente reciben el archivo que desea probar.

Cada controlador de capybara es diferente, eventualmente tendrá que modificar las pruebas para que pasen.

Referencias

Clone this wiki locally