Ошибка валидации в приложении Rails и в Cucumber с Factory Girl - PullRequest
1 голос
/ 06 февраля 2012

У меня появляется следующая ошибка: «Проверка не удалась: адрес электронной почты уже используется» при попытке запустить функцию входа пользователя в Devise.

Я подозреваю, что проблема связана с пользователем, сгенерированным Factory, который каким-то образом создаетсядважды с одним и тем же адресом электронной почты.Я попытался запустить rake db: test: prepare, чтобы сбросить тестовую базу данных, к сожалению, без результатов.

my user_factory.rb

Factory.define :user do |user|
  user.email "user_#{rand(1000).to_s}@example.com"
  user.password "password"
  user.confirmed_at nil
end

Stepsкоторые терпят неудачу с ошибкой проверки: "Тогда я должен быть зарегистрирован и подписан в" и ", а пользователь подписывается в" .my signature_in.feature

Feature: Signing in
  In order to use the site
  As a user
  I want to be able to sign in

  Scenario: Signing in via confirmation
    Given there is an unconfirmed user
    And I open the email with subject "Confirmation instructions"
    And they click the first link in the email
    Then I should be registered and signed in

  Scenario: Signing in via form
    Given there is a confirmed user
    And I am on the homepage
    And user signs in
    Then I should see "Signed in successfully"

my user_steps.rb

def unconfirmed_user
  @unconfirmed_user = Factory(:user)
end


def sign_up user
  visit '/users/sign_up'
  fill_in('Email', :with => "unique@unique.com")
  fill_in('Password', :with => user.password)
  fill_in('Password confirmation', :with => user.password)
  click_button('Sign up')
end

def sign_in user
  visit 'users/sign_in'
  fill_in('Email', :with => user.email)
  fill_in('Password', :with => user.password)
  click_button('Sign in')
end

When /^I'm signing up$/ do
  sign_up unconfirmed_user
end

Given /^there is an unconfirmed user$/ do
  unconfirmed_user
end

Given /^there is a confirmed user$/ do
  unconfirmed_user.confirm!
end

Then /^I should be registered and signed in$/ do
  page.should have_content("Signed in as #{unconfirmed_user.email}")
end

Given /^user signs in$/ do
  sign_in unconfirmed_user.confirm!
end

When /^I open the email with subject "([^"]*?)"$/ do |subject|
  open_email(@unconfirmed_user.email, :with_subject => subject)
end

Что это может быть?Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 06 февраля 2012

Вы должны очищать базу данных между тестами, в основном используя database_cleaner . Проверьте руководство, потому что конфигурация варьируется между настройками. Мы используем это (в env.rb):

DatabaseCleaner.strategy = :truncation
Before do
  DatabaseCleaner.clean
end

Кроме того, вы должны удалить директиву rand в файле фабрики и использовать полезности, которые FactoryGirl предоставляет:

 u.sequence(:email){|n| "user_#{n}@example.com" }
...