name と email の 2 つのフィールドがあり、その組み合わせは大文字と小文字を区別せずに一意である必要があります。クラスと仕様のコードは次のとおりです。最初の 3 つのテストはパスしますが、4 番目のテストはパスしません。
class Person < ActiveRecord::Base
validates :name, presence: true
validates :email, presence: true
validates_uniqueness_of :email, :scope => :name, :case_sensitive => false
validates_uniqueness_of :name, :scope => :email, :case_sensitive => false
end
describe Person do
context "with duplicate name and email" do
before do
@person1 = create(:person)
end
it "for case-sensitive match of both" do
expect(build(:person, {name: @person1.name, email: @person1.email})).to_not be_valid
end
it "for case-insensitive match of name" do
expect(build(:person, {name: @person1.name.swapcase, email: @person1.email})).to_not be_valid
end
it "for case-insensitive match of email" do
expect(build(:person, {name: @person1.name, email: @person1.email.swapcase})).to_not be_valid
end
it "for case-insensitive match of both" do
expect(build(:person, {name: @person1.name.swapcase, email: @person1.email.swapcase})).to_not be_valid
end
end
end