2011-07-13 11 views
0

I現在のテストの一意性の検証を触れることなくモデルに一意性の検証をテスト:レール/ RSpecの:次のようなもの使ってRSpecの中でデータベース

理想的
@unique = Unique.create!(:unique_field => 'unique_value') 
Unique.new(:unique_field => 'unique_value').should_not be_valid 

を、私はデータベースの外に私の鼻を取得したいのですが一意性検証のために。どのようにそれを行うことについて行くためのアイデア?

答えて

1

validates_uniqueness_ofは、アプリケーションレベルの一意性チェックが本質的に競合条件moreになりやすいため、レコードの重複がないことを保証しません。この問題を回避するには、固有のフィールドに一意のインデックスを定義するか、データベースに依存しないテストを行うための回避策を書くことができますが、これらのテストを書く上でのポイントはありません。あなたのアプリには無用なコードしかありません。

0

あなたはiHopeそれ役立つ、幸運

ソースたとえば、あなたがテスト

を実行するたびに変更するには、あなたの工場を編集することで、動的に

Factory.define :user do |f| 
    f.sequence(:username) { |n| "foo#{n}" } 
    f.password "foobar" 
    f.password_confirmation { |u| u.password } 
    f.sequence(:email) { |n| "foo#{n}@example.com" } 
end 

を一意の値を変更することができます。Railscasts Episode #158: Factory Girl

関連する問題