2012-01-09 11 views
16

Agregué algunos cuadros de diálogo de confirmación para mi aplicación Rails 3.1 y, antes de eso, sus correspondientes pruebas. Siguiendo el modelo de Railscast #257, agregué ': js => true' a la prueba, añadí database_cleaner y modifiqué el archivo spec_helper.rb en consecuencia.Error de inicio de sesión al probar con Carpincho, Rspec y Selenium en Rails 3.1

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

me gustaría añadir más javascript para mi aplicación en el futuro y estoy evitando soluciones que piratear capibara a conseguir que esto funcione (por ejemplo, haga clic en 'OK' en todos los diálogos.)

Alguna idea de lo Podría estar perdido? ¿Fallo que, alguna sugerencia sobre cómo depurar este problema?

Gracias.

Respuesta

14

Debe establecer use_transactional_fixtures = false para sus seleniumtests. 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 caso de prueba:

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

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

Para las pruebas normales, debe utilizar accesorios transaccionales porque las pruebas se ejecutan mucho más rápido.

+0

Gracias por responder. Tenía dispositivos transaccionales deshabilitados en mi spec_helper.rb y no funcionó. ¡Pero hacerlo en la prueba específica funcionó! Me registró y falló la prueba cuando hizo clic en el botón. Pero apareció el diálogo de confirmación, ahora solo necesito descubrir cómo hacer clic en él a través de la prueba de integración. ¡Gracias de nuevo! – JHo

+0

si es un diálogo de rieles comunes, puede intentar: page.driver.browser.switch_to.alert.accept –

+0

¿Qué sucede si estoy usando mongoid? no puedo establecer use_transactional_fixtures = false –

9

Según Avdi Grimm's post (cuenta con 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 

que tenía accesorios transaccionales deshabilitado pero añadiendo el bloque :js => true a database_cleaner.rb lo hizo por mí.

Cuestiones relacionadas