Ruby on rails Deviate破坏了我的所有测试-ActiveRecord::RecordNotUnique PG::Error

Ruby on rails Deviate破坏了我的所有测试-ActiveRecord::RecordNotUnique PG::Error,ruby-on-rails,testing,devise,Ruby On Rails,Testing,Devise,我被难住了。我有一个rails应用程序(3.1.3),我一直在构建,最近我在其中添加了Desive(2.0),以创建一个用户模型和相应的身份验证。在我安装Desive并运行rake测试之后,我所有的测试都抛出了相同的错误。在单元测试和功能测试中,我都遇到了如下错误: ERROR should get index (0.05s) ActiveRecord::RecordNotUnique: PG::Error: ERROR: duplicate key value violates

我被难住了。我有一个rails应用程序(3.1.3),我一直在构建,最近我在其中添加了Desive(2.0),以创建一个用户模型和相应的身份验证。在我安装Desive并运行rake测试之后,我所有的测试都抛出了相同的错误。在单元测试和功能测试中,我都遇到了如下错误:

ERROR should get index (0.05s) 
      ActiveRecord::RecordNotUnique: PG::Error: ERROR:  duplicate key value violates unique constraint "index_users_on_email"
DETAIL:  Key (email)=() already exists.
: INSERT INTO "users" ("created_at", "updated_at", "id") VALUES ('2012-03-30 04:13:13', '2012-03-30 04:13:13', 298486374)
      /Users/myname/.rvm/gems/ruby-1.9.2-p290@global/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'
我不明白为什么这会影响我所有的测试,或者是什么原因造成的。以前有人见过这样的东西吗?我做错了什么

任何建议/帮助都将不胜感激


谢谢

Deave需要一个唯一的电子邮件列,而您正试图用email=nil保存多个用户。检查您的测试夹具,您可能只是忘记为夹具用户设置电子邮件。

为了防止有人问这个问题,Cam Norgate在评论中提供了答案

问题出在test/fixtures/users.yml文件中

one: {}
#  column: value
#
two: {}
#  column: value

它试图创建两个空用户(一个和两个),而不使用电子邮件。只需在两行未注释的行之前添加注释即可

由于各种原因,可能会发生此错误。它有助于查看PG::Error:Error的完整回溯,对于您的特定用例,您将看到一些应该导致此错误的app/lib代码

在我的例子中,这是因为我在我的规范套件中将designe登录/注销规范帮助程序与我自己通过capybara(单击“注销”)自定义注销帮助程序混合在一起。Desive然后调用了一些方法来通过更新字段更新用户字段!此时,必须创建一个试图保存的空用户


由于这是spec helpers(使用warden/rack等),它发生在我的rails应用程序的流程之外,因此解释了为什么我得到了一个原始错误,而不是点击我的模型验证。

您的用户模型当前是否有电子邮件列/字段?请参阅此处,感谢大家在此处进行权衡-我自己刚刚解决了这个问题。该问题与自动填充到夹具中的测试数据有关。。。没有提供电子邮件,这导致了问题hi@CamNorgate-很高兴您找到了解决方案。请将其作为“答案”添加到您的问题中(是的,您可以回答自己的问题)。这样,任何遇到同样问题并在此处找到您的问题的人都会知道问题已经解决,并且可以使用您的答案。哎呀。刚刚看到评论。很高兴你明白了。