Rails / Rspec: тестирование проверок уникальности в моделях без соприкосновения с базой данных - PullRequest
0 голосов
/ 13 июля 2011

Я проверяю текущие проверки уникальности в rspec, используя что-то вроде следующего:

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

В идеале, я бы хотел вытащить свой нос из базы данных для проверки уникальности.Есть идеи, как это сделать?

Ответы [ 2 ]

1 голос
/ 13 июля 2011

validates_uniqueness_of не гарантирует отсутствие дублирующих вставок записей, поскольку проверки уникальности на уровне приложения по своей природе подвержены условиям гонки больше . Чтобы обойти эту проблему, вы можете определить уникальный индекс для вашего уникального поля или написать обходной путь, чтобы иметь тесты, которые не зависят от вашей базы данных, однако я не вижу смысла в написании этих тестов. В вашем приложении будет просто какой-то бесполезный код.

0 голосов
/ 16 июня 2013

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

, например

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

iНадеюсь, это полезно, удачи

Источник: Рейлкаст Эпизод # 158: Фабричная девушка

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