我的问题出现在Ruby on Rails教程here的第11章中。Rails 3教程第11章“验证失败:已发送电子邮件”错误
我看到这个RSpec的错误:
Failure/Error: :user => Factory(:user, :email => Factory.next(:email)))
ActiveRecord::RecordInvalid:
Validation failed: Email has already been taken
首先在user_spec.rb
然后micropost_spec.rb
。这非常令人费解。我认为工厂声明每次自动测试运行rspec时都会在新的测试数据库中生成一个用户。我用git从master分支中检出了源文件,然后再次尝试,但看到了同样的错误。因此,我怀疑它与db内容有关,而不是代码。
所以,我做了以下内容:
restarted "rails s"
restarted autotest
rake db:reset
rake db:migrate
rake db:test:prepare
rake db:populate
...而这一切又绿色。 rspec测试通过。
可能有更多的“到了点”的解决方案,但我很高兴这个工作。希望它可以帮助别人。我只能得出结论,我的测试/开发以某种方式向db中添加了一些意想不到的东西。我想上述步骤是一个很好的方法,使自己在第11章结束时的新鲜数据库。
有没有更直接的方法来解决这个问题?错误是否表明我没有意识到的其他问题?我仍然认为运行rspec并不能保证每次都有新的测试数据库。这是一个错误的假设?
有没有任何的问题在这里...这是一个问题=>答案的网站。提出一个问题然后自己回答是完全可以接受的,但是你对此的回答是不正确的:( – nzifnab 2011-03-15 07:00:41
nzifnab you are correct。我的帖子主要是一个声明,不过,我希望对某些人有用我真的接近了一个真正的问题,“如果别人能够在这里发现一些光,我想这也会很好。”我的'解决方案'是一种霰弹枪方法。我仍然不确定哪里出了什么问题,但是对于那些在黑暗中生活的人来说,上面的配方可能是一个方便的解决方案。 – 2011-03-15 14:24:15
我明白你的观点。我可以发布这样的话:“我在第11章中有令人费解的rspec错误....”然后还发表了自己的评论。抱歉。下次。如果当地时间不是凌晨4点,我可能会想到第一次复飞。 P. – 2011-03-15 14:30:22