2010-07-06 11 views
19

Después de 3 años de procrastinación, hoy es el día en que empiezo a probar mis aplicaciones de Rails. Mi primer paso es arreglar las pruebas fallidas en mi aplicación Rails 3 beta4.Haciendo pruebas funcionales en Rails con Devise

¡Mis últimas 3 pruebas fallidas tienen que ver con la gema del ingenio y su authenticate_user! método en un before_filter en la parte superior de mi controlador.

Ganarás un gran karma ayudándome con esto ya que me permitirá usar la metodología TDD a partir de ahora.

Aquí está el error que me preocupa:

1) Error: 
test_should_get_accepted(ModerationControllerTest): 
NoMethodError: undefined method `authenticate!' for nil:NilClass 
    /test/functional/moderation_controller_test.rb:10:in `test_should_get_accepted' 

Diseñar apenas da pruebas funcionales punteros y ayudantes en esta página: http://github.com/plataformatec/devise pero simplemente no saben cómo poner esto en la aplicación.

¿Puede dar a este novato de prueba algunas instrucciones detalladas sobre cómo usar estos ayudantes?

Respuesta

50

Me tomó un tiempo pero encontré el camino. Aquí es para cualquiera atrapado en el mismo punto:

En la parte superior de la moderation_controller_test.rb, por debajo de la declaración de la clase, agregue esta línea:

include Devise::TestHelpers 

tengo 2 registros en mi dispositivo de usuario y yo agregó esta línea dentro de cada prueba donde el usuario debe estar autorizado para realizar la acción.

sign_in User.first 

Por supuesto que es muy simple una vez que sabes cómo hacerlo.

+3

Creó otros errores para incluir Devise :: TestHelpers en el archivo test_helper.rb. De acuerdo con esta respuesta, solo se debe incluir en los archivos de prueba individuales: http://stackoverflow.com/questions/2839328/testing-devise-with-shoulda Así que edité su respuesta – vdaubry

+1

, el problema no está en ponerlo en test_helper.rb per se. El problema es si no tiene el alcance correcto: debe estar en la clase ActionController :: TestCase. Si está incluido en el bloque ActiveSupport :: TestCase en test_helper.rb, las cosas se ponen feas. – jpgeek

7

Soy relativamente nuevo en Rails, así que me gustaría agregar un par de cosas que pueden no ser obvias para otras personas nuevas.

En cuanto al dispositivo de usuario, tuviera que definir uno, sino dejarlo vacío para que esto funcione:

# in users.yml  
joe: {} 

Cuando se utiliza el ayudante legado sign_in, se puede acceder al objeto hash directamente en su ensayo:

# a test method in some_controller_test.rb 
sign_in users(:joe) 

Ver http://guides.rubyonrails.org/testing.html#the-low-down-on-fixtures para obtener más información sobre accesorios de Rieles.

18

Si desea que los ayudantes de prueba Diseñar estén disponibles para todas las pruebas, hay que encerrar la incluyen mencionado por allesklar en la parte inferior de test_helper.rb en una declaración de la clase así:

class ActionController::TestCase 
    include Devise::TestHelpers 
end 

actualización : 01.25.2017

... rieles de 5 mensajes a ADVERTENCIA deprecation & pide que utilice ...

Devise::Test::ControllerHelpers

+1

Esta debería ser la respuesta aceptada – rndstr

0

Además del código en test_helpers.rb, añadí esta en la parte superior de la controller_test y funcionó para mí:

require 'test_helper' 
1

Citando textualmente de https://github.com/plataformatec/devise:

Si está utilizando RSpec, se puede poner lo siguiente en un archivo llamado spec/support/devise.rb:

RSpec.configure do |config|

config.include Devise::TestHelpers, :type => :controller

end

Ahora puede utilizar sign_in y sign_out en sus pruebas RSpec.

Cuestiones relacionadas