tutorial rails instalar hacer create como ruby-on-rails devise functional-testing fixtures

ruby on rails - instalar - Pruebas funcionales con Rails y Devise. ¿Qué poner en mis accesorios?



devise user logged in (4)

Está funcionando para mí.

No cambié nada en mi dispositivo de usuario, es así:

one: id: 1 name: MyString email: [email protected] group_id: 2 encrypted_password: <%= Devise.bcrypt(User, ''password'') %>

Pero cambié mi test_helper.rb y lo agregué a la clase ActionController (esto funcionará para todas las pruebas de controladores):

class ActionController::TestCase include Devise::TestHelpers setup do sign_in users(:one) end end

Hola, quiero hacer algunas pruebas funcionales de mi aplicación Rails 3 que utiliza Devise y CanCan.

En mi modelo de usuario Tengo la edad de los usuarios, quiero probar que un usuario solo puede visitar una determinada página si son:

  1. Conectado
  2. Mas de 35

He visto en el documento de Devise que puedo usar: * sign_in * y lo puse en mis pruebas y parece que funciona. La prueba no produce errores porque tengo:

include Devise::TestHelpers

en mi * test_helper.rb *

Cuando lo saco, mi prueba produce un error porque * sign_in * no está definido. Así que no es un problema de ayuda.

Cuando ejecuto la prueba y compruebo si span # login tiene una aparición, la prueba falla porque hay 0 apariciones. span # login solo aparece * si user_signed_in? *

¿Qué necesito poner en mis accesorios o pruebas para crear un usuario de prueba que también sea un usuario completamente registrado (confirmado, etc.)?

Ver código:

<% if user_signed_in? %> <span id="loggedin">User is signed in</span> User age is <span id="age"><%= current_user.age.to_s %></span> <% end %>

Código de prueba:

test "should get index" do sign_in :one get :index assert_response :success assert_select ''span#loggedin'', :count => 1 end

Accesorio:

one: email: [email protected] age: 36

Funciona bien en el desarrollo cuando inicio sesión manualmente, pero espero poder automatizarlo todo: ¡el punto de prueba realmente!


He solucionado el problema: estaba iniciando sesión incorrectamente en el usuario.

Mi prueba debería haber leído:

test "should get index" do @user = users(:one) sign_in @user get :index assert_response :success assert_select ''span#loggedin'', :count => 1 end

Esto también funciona y elimina una línea de código:

test "should get index" do sign_in users(:one) get :index assert_response :success assert_select ''span#loggedin'', :count => 1 end

Mi comprensión de los accesorios faltaba ...

Pero volviendo a la pregunta - qué poner en accesorios:

one: email: [email protected] encrypted_password: $2a$10$PoBe1MvkoGJsjMVTEjKqgeBUp.xdfzWoiDjBzQhtLAj16NqIa2fOy password_salt: $2a$10$PoBe1MvkoGJsjMVTEjKqge reset_password_token: nil remember_token: nil remember_created_at: nil sign_in_count: 1 current_sign_in_at: 2011-01-02 08:31:23 last_sign_in_at: 2011-01-02 08:31:23 current_sign_in_ip: 127.0.0.1 last_sign_in_ip: 127.0.0.1 confirmation_token: nil confirmed_at: 2011-01-02 08:31:23 confirmation_sent_at: 2011-01-02 08:30:59 failed_attempts: 0 unlock_token: nil locked_at: nil authentication_token: nil created_at: 2011-01-02 08:30:59 updated_at: 2011-01-02 08:31:23 age: 36

Ahora funciona. Si es más fácil generar un usuario en dev y pegar los datos en un dispositivo, por favor, publique.



Solución para Devise pre 3.2.0

Creo que esto podría ser lo que buscas:

User.new.send(:password_digest, ''password'')

Funciona cuando la sal es nula.

Y por lo tanto en tu accesorio puedes hacer esto:

one: email: ''[email protected]'' encrypted_password: <%= User.new.send(:password_digest, ''password'') %>

Solución para versiones de Devise 3.2.0 a 3.5.0

En Devise 3.2.0, se creó un método precisamente para este propósito (actualización de @Inkling). Para estas versiones, la contraseña cifrada debe definirse así:

encrypted_password: <%= Devise.bcrypt(User, ''password'') %>

donde User es la clase de su modelo de usuario.

Tenga en cuenta que esto solo se aplica si está utilizando el algoritmo de cifrado predeterminado (bcrypt).

Solución para versiones de Devise 3.5.1 y superiores

Como Katarzyna ha señalado: Device.bcrypt ha quedado en desuso en la versión 3.5.1. A partir de esa versión, la contraseña cifrada debe definirse así:

encrypted_password: <%= Devise::Encryptor.digest(User, ''password'') %>