Rails 3アプリケーションには、特定のフィールド(ユーザーモデルでの役割)の動作をチェックして、値が有効な値のリスト内にあることを保証するRSpec仕様があります。
次に、別の有効な値のセットを持つ別のモデルで、別のフィールドに対してまったく同じ仕様を使用します。単にコピーして貼り付けたり、変数を変更したりするのではなく、共通のコードを抽出したいと思います。
これが共有の例または他のRSpec再利用手法を使用する場合であるかどうか疑問に思います。
関連するRSpecコードは次のとおりです。
describe "validation" do
describe "#role" do
context "with a valid role value" do
it "is valid" do
User::ROLES.each do |role|
build(:user, :role => role).should be_valid
end
end
end
context "with an empty role" do
subject { build(:user, :role => nil) }
it "is invalid" do
subject.should_not be_valid
end
it "adds an error message for the role" do
subject.save.should be_false
subject.errors.messages[:role].first.should == "can't be blank"
end
end
context "with an invalid role value" do
subject { build(:user, :role => 'unknown') }
it "is invalid" do
subject.should_not be_valid
end
it "adds an error message for the role" do
subject.save.should be_false
subject.errors.messages[:role].first.should =~ /unknown isn't a valid role/
end
end
end
end
このコードを再利用するのに最適なケースは何ですか?ただし、このコードに渡されるパラメーターにロール(検証されるフィールド)とUser :: ROLES(有効な値のコレクション)を抽出しますか?