Грешка при неуспешно валидиране в приложението 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: 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 във файла с фабрики и да използвате екстрите, които FactoryGirl предоставя:

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