我遇到以下错误:“验证失败:已使用电子邮件地址”,同时尝试运行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 => "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
它可以是什么? 在此先感谢您的帮助。
答案 0 :(得分:0)
您应该在测试之间清除数据库,主要是使用database_cleaner。检查手册,因为配置因设置而异。我们正在使用这个(env.rb
):
DatabaseCleaner.strategy = :truncation
Before do
DatabaseCleaner.clean
end
此外,您应该删除工厂文件中的rand
指令并使用FactoryGirl提供的好东西:
u.sequence(:email){|n| "user_#{n}@example.com" }