我正在学习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函数非常相似的原始版本,则测试会通过。有人可以提供解释吗?
感谢。
答案 0 :(得分:1)
听起来像:用户工厂每次创建用户时都会返回相同的电子邮件地址。因为你有以前的(:每个)它会在数据库中制作和填充多个用户,并且他们都将拥有相同的电子邮件。
如果您发布工厂,我们可能会调整它以使用序列或找到替代解决方案。