Yayınlar tablosunda kendi kendine birleştirme olduğunda makale çevirileri oluşturmak için bir sistemi test etmeye çalışıyorum. Birden fazla çeviri oluşturacak ve bir 'ebeveyn' makalesiyle ilişkilendirecek bir fabrika oluşturdum.Fabrika Kız kendi kendine doğrulama onayı doğrulama kusurları
# models/publication.rb
has_many :translations, class_name: "Publication", foreign_key: "translation_id", dependent: :nullify
belongs_to :translation, class_name: "Publication", optional: true
validates :language, uniqueness: { scope: :translation_id }, if: :is_translation?
def is_translation?
!translation.nil?
end
: factory_girl 4.7.0, RSpec ve Database_cleaner
Tüm eylemler beklendiği gibi çalışır, ancak bir test oluşturma sorun İşte
olduğu ile Rayları 5 Kullanılması
ilgili modeli doğrulamaları ve yöntemleri var
Fabrika (ilgisiz kod çıkartılmıştır):
# spec/factories/publication.rb
factory :publication, aliases: [:published_pub] do
title 'Default Title'
language 'EN'
published
after(:build) do |object|
create(:version, publication: object)
end
#-- This is where I suspect the problem stems from
trait :with_translations do
association :user, factory: :random_user
after(:build) do |object|
create_list(:translation, 3, {user: object.user, translation:object})
end
end
end
factory :translation, class: Publication do
sequence(:title) { |n| ['French Article', 'Spanish Article', 'German Article', 'Chinese Article'][n]}
sequence(:language) { |n| ['FR', 'ES', 'DE', 'CN'][n]}
user
end
ve bir bazik testi:
# spec/models/publication_spec.rb
before(:each) do
@translation_parent = create(:publication, :with_translations)
@pub_without_trans = create(:publication, :with_random_user)
end
scenario 'is_translation?' do
# No actual test code needed, this passes regardless
end
scenario 'has_translations?' do
# No actual test code needed, this (and subsequent tests) fail regardless
end
Son olarak, hata:
Failure/Error: create_list(:translation, 3, {user: object.user, translation:object})
ActiveRecord::RecordInvalid:
Validation failed: Language has already been taken
birinci test geçerse (ve çevirileri yayın nesne doğru oluşturulur), daha sonra hiçbir test başarısız olur. Sorun şu ki, çeviri_konu için benzersiz bir doğrulamaya sahibim ve fabrika kızının üretilen çevirileri, tamamen yeni bir yayın oluşturmak yerine halihazırda var olan bir yayına eklemeye çalıştığı anlaşılıyor.
Herhangi bir yardım için teşekkür ederiz!