Ошибка проверки в приложении Rails и Cucumber с Factory Girl

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

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

мой 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

Шаги, которые завершаются ошибкой проверки: "Затем я должен зарегистрироваться и войти в систему" и "И пользователь входит в систему". моя signing_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"

мой user_steps.rb

def unconfirmed_user
  @unconfirmed_user = Factory(:user)
end


def sign_up user
  visit '/users/sign_up'
  fill_in('Email', :with => "[email protected]")
  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

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


person Dmitry Veremchuk    schedule 06.02.2012    source источник


Ответы (1)


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

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

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

 u.sequence(:email){|n| "user_#{n}@example.com" }
person fuzzyalej    schedule 06.02.2012
comment
Кроме того, разве вы не должны заполнять поле электронной почты с помощью user.email в методе регистрации? - person AlistairH; 06.02.2012