Rspec тестирование на уникальность / дубликаты значений - PullRequest
2 голосов
/ 09 ноября 2011

Я пытаюсь написать тест rspec, который определит, имеют ли разные удостоверения одинаковые значения (проверьте уникальность для провайдера и идентификатора)

Вот тест, над которым я работаю. Я просто бросил в нее какую-то хрень, потому что отчаялся ...

context "no duplicate values should exist" do
  identity1 = subject { Factory.create(:valid_identity) }
  it { should be_valid }
  identity2 = identity1
  it { should validate_uniqueness_of(:id) }
  it { should have(1).error_on(:id) }
  it { should validate_uniqueness_of(:provider) }
  it { should have(1).error_on(:provider) }

end


Чтобы дать вам представление о структуре, к которой я привык, я написал базовые тесты, подобные приведенному ниже, и, если возможно, я бы хотел придерживаться такой же структуры

context "when created without a name" do
  subject { Brand.create Factory.build(:valid_brand, :name => nil).attributes }
  it { should be_invalid }
  it { should have(1).error_on(:name) }
  specify { subject.errors[:name].should include "can't be blank" }
end

моя фабрика идентичности такова:

Factory.define :valid_identity, :class => Identity do |identity|
  identity.participant {|participant| participant.association(:valid_participant) }
  identity.provider "twitter"
  identity.extid '11111'
end

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 09 ноября 2011

Вам нужно следующее поведение: когда я создаю новый объект и у меня уже есть объект в базе данных с тем же поставщиком / идентификатором, чем должен быть новый объект недействительным.

В псевдокоде это означает:

# 1. create a totally valid object and save it in the database
obj1 = create_valid_object_and_save_it
# 2. we need a second object that's totally valid when obj1 exists
obj2 = create_second_valid_object_dont_save_it
# 3. we make the bad condition
obj2.provider = obj1.provider
# 4. now comes the actualy test, obj2 must not be valid!
assert ! obj2.valid?

Если вы хотите проверить валидацию, всегда начинайте с допустимого объекта и изменяйте то, что вы хотите сделать недействительным.Таким образом, вы уверены, что ваш тест не провалится в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...