tutorial test rails matchers bot ruby-on-rails-3 selenium capybara factory-bot rspec-rails

ruby on rails 3 - test - Error de inicio de sesión al realizar pruebas con Capybara, Rspec y Selenium en Rails 3.1



rspec rails tutorial (2)

Debe establecer use_transactional_fixtures = false para sus pruebas de selenio. Esto se puede hacer en el spec_helper.rb con

config.use_transactional_fixtures = false

para todas sus pruebas.

O hacer esto para un solo testcase:

describe ''testcase'' , :type => :request do self.use_transactional_fixtures = false it ''your test'', :js => :true do testing... end end

Esto sucede porque las pruebas de selenio acceden a la base de datos de una manera diferente. Con los dispositivos transaccionales habilitados, selenium funcionará en una base de datos vacía -> su usuario no existe y no puede iniciar sesión.

Para las pruebas normales, debe usar dispositivos transaccionales porque sus pruebas se ejecutan mucho más rápido.

Agregué algunos cuadros de diálogo de confirmación para mi aplicación Rails 3.1 y, antes de eso, sus pruebas correspondientes. Siguiendo el modelo de Railscast # 257 , agregué '': js => true'' a la prueba, agregué database_cleaner y modifiqué el archivo spec_helper.rb en consecuencia.

Cuando ejecuto la prueba, se inicia Firefox, Capybara-Selenium rellena los campos con el nombre de usuario y la contraseña apropiados, pero falla el inicio de sesión (es decir, "nombre de usuario / contraseña no válido".) Otras pruebas que no tienen '': js = > true ''y también iniciar sesión, todavía pasar.

Me gustaría agregar más javascript a mi aplicación en el futuro y estoy evitando las soluciones que piratearían a Capybara para que esto funcione (por ejemplo, haga clic en "Aceptar" en todos los cuadros de diálogo).

¿Alguna idea de lo que pueda faltar? Si falla eso, ¿alguna sugerencia sobre cómo depurar este problema?

Gracias.


Según la publicación de Avdi Grimm (presenta una explicación detallada):

Gemfile:

group :test do gem ''database_cleaner'' end

spec_helper.rb:

config.use_transactional_fixtures = false

spec / support / database_cleaner.rb:

RSpec.configure do |config| config.before(:suite) do DatabaseCleaner.clean_with(:truncation) end config.before(:each) do DatabaseCleaner.strategy = :transaction end config.before(:each, :js => true) do DatabaseCleaner.strategy = :truncation end config.before(:each) do DatabaseCleaner.start end config.after(:each) do DatabaseCleaner.clean end end

Tenía los dispositivos transaccionales deshabilitados, pero agregar el bloque :js => true a database_cleaner.rb hizo por mí.