rail_sutorial_up在railstutorial第9章练习中不起作用

时间:2012-01-13 17:47:31

标签: ruby-on-rails ruby-on-rails-3 rspec railstutorial.org

我正在学习rais教程:http://ruby.railstutorial.org/chapters/sign-in-sign-out#fnref:9.14

我正在做练习。赋值是在spec helper中创建一个登录方法,以便可以在集成测试中使用它。他已经给出了代码:

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 :(得分:1)

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

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