Devise / Cucumber - добавление шага, подтверждающего существование пользователя - PullRequest
6 голосов
/ 03 ноября 2010

Я новичок в огурце, и я нашел следующие фрагменты, чтобы проверить функцию входа в Devise.Однако кажется, что пропущен еще один шаг, и я не нашел никакого решения:

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

Вот следующий код:

features / authentication / 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             |
    | minimal@example.com |  test1234   | see "Signed in successfully"    |
    | bad@example.com     |  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"

features / 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 / factories / user.rb

Factory.define :minimal_user, :class => User do |u|
  u.username 'minimal'
  u.email 'minimal@example.com'
  u.password 'test1234'
  u.password_confirmation 'test1234'
end

Здесь ссылка на оригинальный код

Большое спасибо за вашу помощь !!

Ответы [ 3 ]

2 голосов
/ 03 ноября 2010

В вашем заголовке написано «проверить, существует ли пользователь», но это может быть не то, что вам нужно делать - ваши шаги Given не обязательно должны утверждать, что что-то работает, они вызывают код для создания приложениясостояние для вашего сценария.Конечно, они все еще тесты, потому что они все еще могут потерпеть неудачу.

Я думаю, вы ищете что-то вроде этого:

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

Это создаст и сохранит нового подтвержденного пользователя изваше фабричное определение, чтобы остальная часть сценария могла продолжаться.

1 голос
/ 03 ноября 2010

Чтобы завершить ответ Даниэля и, поскольку я включил подтверждаемый модуль Devise, я должен добавить строку в свой прибор, чтобы сказать, что пользователь подтвержден.

Например:

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

Кроме того, шаги отладки, которые вы можете найти здесь , очень полезны.

Надеюсь, это поможет некоторым людям.

0 голосов
/ 03 ноября 2010
(::) 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'
...