2010-11-02 9 views
6

Soy nuevo en pepino y encuentro los siguientes fragmentos para probar la función de inicio de sesión de Devise. Sin embargo, parece un paso más falta, y no se encontró ninguna solución:Devise/Cucumber: agregue un paso que confirme que existe un usuario

Given /^that a confirmed user exists$/ do 
    pending # express the regexp above with the code you wish you had 
end 

Aquí el siguiente código:

características/autenticación/session.feature

Feature: Session handling 
    In order to use the site 
    As a registered user 
    I need to be able to login and logout 

Background: 
    Given that a confirmed user exists 

Scenario Outline: Logging in 
    Given I am on the login page 
    When I fill in "user_email" with "<email>" 
    And I fill in "user_password" with "<password>" 
    And I press "Sign in" 
    Then I should <action> 
    Examples: 
    |   email  | password |    action    | 
    | [email protected] | test1234 | see "Signed in successfully" | 
    | [email protected]  | password | see "Invalid email or password" | 

Scenario: Logging out 
    Given I am logged in 
    When I go to the sign out link 
    Then I should see "Signed out successfully" 

características/step_definitions /authentication_steps.rb

# Session 
Given /^I am logged in$/ do 
    visit path_to('the login page') 
    fill_in('user_email', :with => @user.email) 
    fill_in('user_password', :with => @user.password) 
    click_button('Sign in') 
    if defined?(Spec::Rails::Matchers) 
    page.should have_content('Signed in successfully') 
    else 
    assert page.has_content?('Signed in successfully') 
    end 
end 

spec/fábricas/user.rb

Factory.define :minimal_user, :class => User do |u| 
    u.username 'minimal' 
    u.email '[email protected]' 
    u.password 'test1234' 
    u.password_confirmation 'test1234' 
end 

Aquí el enlace a los orginal code

Muchas gracias por su ayuda !!

Respuesta

2

Su título dice "valide que un usuario existe", pero eso no es lo que necesita hacer allí - sus pasos Given no necesitan afirmar que algo funcionó, invocan código para crear el estado de la aplicación para su escenario. Por supuesto, todavía son pruebas, ya que aún pueden fallar.

pienso que usted está buscando algo como esto:

Given /^that a confirmed user exists$/ do 
    Factory.create(:minimal_user) 
end 

que va a crear y guardar un nuevo usuario confirmado de su definición de fábrica por lo que el resto del escenario puede continuar.

+0

¡Muchas gracias! – benoitr

+0

¡Ningún problema! Acabo de editar para agregar más información RE: pasos dados. –

+0

OK Daniel, entonces cambiaré el título. También tengo 2 errores como resultado de ese código. Estaría muy contento si puede ayudarme con esto. Agrego los pasos fallidos como una respuesta. ¡Gracias! – benoitr

0
(::) failed steps (::) 

expected #has_content?("Signed in successfully") to return true, got false (RSpec::Expectations::ExpectationNotMetError) 
./features/step_definitions/web_steps.rb:110:in `block (2 levels) in <top (required)>' 
./features/step_definitions/web_steps.rb:14:in `with_scope' 
./features/step_definitions/web_steps.rb:108:in `/^(?:|I)should see "([^"]*)"(?: within "([^"]*)")?$/' 
features/authentication/session.feature:16:in `Then I should <action>' 

undefined method `email' for nil:NilClass (NoMethodError) 
./features/step_definitions/authentication_steps.rb:43:in `/^I am logged in$/' 
features/authentication/session.feature:23:in `Given I am logged in' 
1

Para completar la respuesta del Daniel y porque permiten que el módulo confirmable Diseñar, debo añadir una línea en mi dispositivo con el fin de decirle que el usuario se confirma.

Por ejemplo:

Factory.define :minimal_user, :class => User do |u| 
    u.username 'minimal' 
    u.email '[email protected]' 
    u.password 'test1234' 
    u.password_confirmation 'test1234' 
    u.confirmed_at 'here the date you want' 
end 

Además, depurar pasos que puede encontrar here son muy útiles.

Espero que ayude a algunas personas.

+0

En el futuro, no debe agregar esto como una respuesta. En su lugar, debe actualizar su pregunta. – RyanJM

Cuestiones relacionadas