Rails 3 Tutorial Chapter 11 “Validation failed: Email has already been taken” error

。_饼干妹妹 提交于 2019-11-28 07:45:36
Carl Thuringer

I had trouble with the Integration tests shortly after Chapter 9.4. All of my controller tests and the request integration test blew up with the message 'Email has already been taken'

What I learned from RailsTutorial - chapter 8.4.3 - Test database not clearing after adding user in integration test is that you need to do something to clean up after integration tests, because unlike unit tests they may not clean up after themselves.

The solution presented there was to use the DatabaseCleaner gem, the implementation of which is also explained in the linked Question.

I think that if you don't implement some strategy for cleaning up after the integration test you will continue to have to use your 'shotgun' solution for cleaning up the DB every time you run the test suite. Definitely not fun.

This works for me:

bundle exec rake db:test:prepare

It's also in the tutorial.

For me, the issue seemed to be running Spork. After restarting it I can run the tests as many times as I need.

It helped, added to the file factories

sequence(:email) {|n| "person#{n}@example.com" }
doorsfan

In my case problem was in equals emails in

factory :user

and

factory :user_with_additional_options
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!