У меня возникла следующая проблема.Рельсы 5 - Ошибки с FactoryGirl
Я использую Rails Factory Girl с такими переменными, как это:
FactoryGirl.define do
conta_destino_matriz = FactoryGirl.create(:conta_pessoa_fisica, saldo: 0)
conta_origem_filial = FactoryGirl.create(:conta_pessoa_fisica, saldo: 1000, ancestry: conta_destino_matriz.id)
codigo_transacional = TransacaoHelper::Gerador.codigo_alphanumerico(
tipo: 'transferencia', conta_origem_id: conta_origem_filial.id, conta_destino_id: conta_destino_matriz.id
)
factory :transacao_transferencia_matriz, class: Transacao do
tipo { 'transferencia' }
valor { '250' }
conta_origem_id { conta_origem_filial.id }
conta_destino_id { conta_destino_matriz.id }
trait :campos_completos do
codigo_transacional { codigo_transacional }
conta_origem_valor_antes_transacao { conta_origem_filial.saldo }
conta_destino_valor_antes_transacao { conta_destino_matriz.saldo }
estornado { false }
codigo_transacional_estornado { nil }
end
end
end
Где conta_destino_matriz объявлена вне определения имени завода. Это необходимо потому, что два атрибута из де фабрики должны иметь два значения из некоторого объединения, как:
conta_destino_id { conta_destino_matriz.id }
conta_destino_valor_antes_transacao { conta_destino_matriz.saldo }
И еще один тест использует завод с одной и той же ассоциации фабрики conta_pessoa_fisica:
FactoryGirl.define do
conta_origem_hierarquia_igual = FactoryGirl.create(:conta_pessoa_fisica, saldo: 1000)
conta_destino_hierarquia_igual = FactoryGirl.create(:conta_pessoa_fisica, saldo: 0, ancestry: conta_origem_hierarquia_igual.id)
codigo_transacional_hierarquia_igual = TransacaoHelper::Gerador.codigo_alphanumerico(
tipo: 'transferencia', conta_origem_id: conta_origem_hierarquia_igual.id, conta_destino_id: conta_destino_hierarquia_igual.id
)
conta_origem_hierarquia_diferente = FactoryGirl.create(:conta_pessoa_fisica, saldo: 1000)
conta_destino_hierarquia_diferente = FactoryGirl.create(:conta_pessoa_fisica, saldo: 0)
factory :transacao_transferencia_hierarquia, class: Transacao do
tipo { 'transferencia' }
valor { '250' }
conta_origem_id { conta_origem_hierarquia_igual.id }
conta_destino_id { conta_destino_hierarquia_igual.id }
trait :campos_completos do
codigo_transacional { codigo_transacional_hierarquia_igual }
conta_origem_valor_antes_transacao { conta_origem_hierarquia_igual.saldo }
conta_destino_valor_antes_transacao { conta_destino_hierarquia_igual.saldo }
estornado { false }
codigo_transacional_estornado { nil }
end
trait :diferente do
conta_origem_id { conta_origem_hierarquia_diferente.id }
conta_destino_id { conta_destino_hierarquia_diferente.id }
end
end
end
И это ассоциации:
FactoryGirl.define do
factory :pessoa_fisica do
cpf { Faker::Number.number(11) }
nome { Faker::Name.name }
data_nascimento { Date.today.strftime('%Y-%m-%d') }
factory :pessoa_fisica_invalida do
id { 0 }
cpf { Faker::Number.number(10) }
nome { '' }
data_nascimento { (DateTime.now + 1.day).strftime('%Y-%m-%d') }
end
end
end
ошибка, что я получил происходит в «Номе» атрибута из: pessoa_fisica класс уже хранится. Полевые муссы уникальны и только персонажи.
nome { Faker::Name.name }
Так что, когда мой тестовый прогон и Он призывает: transacao_transferencia_matriz и: transacao_transferencia_hierarquia и иногда я получил сообщение об ошибке, что говорит
`raise_validation_error': A validation failed: Nome is already taken (ActiveRecord::RecordInvalid)
И тем хуже, это то, что я получил эту ошибку не всегда, но иногда.
Я пришел, чтобы закончить эту тему. Реальная проблема заключалась в том, что я ожидал, что FactoryGirl очистит базу данных, но это не так. Итак, ошибка была в этом. То, что у Faker есть ограничение имен, которые иногда совпадают с базой данных, и я получил ошибку. Спасибо за подсказку. Я тоже буду использовать последовательность, но в этом случае буду использовать буквы, потому что поле не может иметь числа. –