2012-01-13 62 views
0

我学习赖斯:http://ruby.railstutorial.org/chapters/sign-in-sign-out#fnref:9.14integration_sign_up在railstutorial第9章的练习不会从轨道教程书工作

我在锻炼的工作。这个任务是在spec帮助器中创建一个登录方法,以便它可以在集成测试中使用。他已经给出了代码:

def integration_sign_in(user) 
    visit signin_path 
    fill_in :email, :with => user.email 
    fill_in :password, :with => user.password 
    click_button 
    end 

所以,在我的layout_links_spec.rb集成测试中,我打算使用它。

before(:each) do 
     @user = Factory(:user) 
     visit signin_path 
     fill_in :email, :with => @user.email 
     fill_in :password, :with => @user.password 
     click_button 
     # integration_sign_in(Factory(:user)) 
    end 

我评论一切,并使用integration_sign_in(Factory(:user))。我得到的错误是

ActiveRecord::RecordInvalid: 
     Validation failed: Email has already been taken 

但是,如果我用这看起来很相似,integration_sign_in功能原来,测试通过。有人可以提供解释吗?

谢谢。

回答

1

听起来像您的:用户工厂每次创建用户时都会返回相同的电子邮件地址。因为你有以前的(:每个)它将会制作并填充到数据库中的多个用户,并且它们都将具有相同的电子邮件。

如果您发布您的工厂,我们可以调整它以使用序列或找到替代解决方案。

+0

啊。完美的解释我的factories.rb是这样的:Factory.define:user do | user | user.name “迈克尔·哈特尔” user.email “[email protected]” user.password的 “foobar的” user.password_confirmation “foobar的” 结束 – okysabeni 2012-01-13 18:00:38

+0

您更改user.email “[email protected]” 到f 。序列(:email){| n | “foo#{n}@example.com”} – Webjedi 2012-01-13 18:07:02

+0

谢谢Webjedi! – okysabeni 2012-01-13 18:18:54

相关问题