Я работаю над набором тестов RSpec для своего проекта, и я использую FactoryGirl вместо светильников. Я слежу за советом ThoughtBot о том, как нарисовать свой пакет до того, как я его запустил, но я получаю FactoryGirl::InvalidFactoryError
, когда я им наплеваю, и я знаю, что это проблема с моими ассоциациями, но я не знаю, как это исправить.FactoryGirl linting errors, association, validates_uniqueness_of
вопрос сводится к трем моделям:
протокола
class Protocol < ActiveRecord::Base
validates :name, presence: true, uniqueness: true
validates :email, uniqueness: true
end
Запись
class Record < ActiveRecord::Base
belongs_to :protocol
validates_presence_of :protocol
# belongs_to and validates_presence_of other things that appear to be working
end
Отторжение
class Rejection < ActiveRecord::Base
belongs_to :record
validates_presence_of :record
end
Для того, Record
требует Protocol
, а Rejection
требует: Record
. Вот мои заводы:
factory :protocol do
name "Protocol name"
email "[email protected]"
end
factory :record do |r|
status "REVIEW"
association :protocol
# other associations that are not causing issues
end
factory :rejection do
message "Message text here"
association :record
end
И когда я нибудь вкусненькое свой пакет, я получаю следующие ошибки:
* record - Validation failed: Name has already been taken, Email has already been taken (ActiveRecord::RecordInvalid)
* rejection - Validation failed: Name has already been taken, Email has already been taken (ActiveRecord::RecordInvalid)
Похоже, что Record
и Rejection
заводов, каждый пытается создать Protocol
для выполнения тех валидации, но после первого названия на фабрике Protocol
больше не является уникальным, и это заставляет других терпеть неудачу. Как я могу предотвратить эти ошибки? Я был бы в порядке с повторным использованием того же Protocol
, но я не знаю, как это сделать. Я попытался сделать это с блоком before(:create)
на фабриках Record
и Rejection
, но это похоже на хрупкий способ обойти его. Любые советы будут очень признательны. Спасибо!