私の問題は、RubyonRailsチュートリアルの第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
。かなり不可解でした。autotestがrspecを実行するたびに、ファクトリステートメントが新しいテストデータベースでユーザーを生成していると思いました。gitを使用してマスターブランチからソースファイルをチェックアウトして再試行しましたが、同じエラーが発生しました。したがって、コードではなく、dbの内容に何らかの形で関連しているのではないかと思いました。
だから、私は次のことをしました:
restarted "rails s"
restarted autotest
rake db:reset
rake db:migrate
rake db:test:prepare
rake db:populate
...そしてそれはすべて緑になりました。rspecテストに合格しました。
もっと「要点」の解決策があるかもしれませんが、私はこれがうまくいったことに興奮しました。それが他の誰かを助けることを願っています。私のテスト/開発は、どういうわけか予期しない何かをデータベースに追加したと結論付ける必要があります。上記の手順は、第11章の終わり近くで新しいデータベースを作成するための良い方法だと思います。
これを解決するためのより直接的な方法はありましたか?エラーは、気付かずに対処した他の問題を示していますか?rspecを実行しても、毎回新しいテストデータベースが保証されるわけではないと思います。それは間違った仮定ですか?