Closed vanderleipinto closed 7 months ago
Criamos um atributo transitório em spec/factories/customer.rb onde o valor upcased pode ser mudado na criação do objeto. Ex: customer = create(:customer, upcased: true)
transient do
upcased {false}
end
no final da factory criamos um after(:create) para executar verificações depois da criação:
after(:create) do |customer, evaluator|
customer.name.upcase! if evaluator.upcased
end
Executa essa ação após criar o objeto e transforma em maiúsculo se upcased == true.
No teste spec/models/customer_spec.rb
require 'rails_helper'
RSpec.describe Customer, type: :model do
it 'Usando o Attributos Transitórios' do
customer = create(:customer, upcased: true)
expect(customer.name).to eq(customer.name.upcase)
end
end
OBS: Se usarmos o attrs = attributes_for(:customer) para pegar os atributos, ele não vai contemplar o atributo transitório.
Transient attributes, em um contexto de testes com o FactoryBot (anteriormente conhecido como FactoryGirl), são atributos temporários que podem ser definidos em uma fábrica, mas não são persistidos no banco de dados ao criar um objeto de modelo.
Esses atributos transientes são úteis quando você precisa fornecer valores temporários ou calculados apenas para fins de teste, mas que não devem ser armazenados no banco de dados. Por exemplo, você pode ter um modelo
Customer
com um atributofull_name
, que é uma concatenação dos atributosfirst_name
elast_name
. Se você quiser testar algum comportamento que envolvafull_name
, mas não precisa realmente persistir esse valor no banco de dados, você pode definirfull_name
como um atributo transitório.No FactoryBot, você pode definir atributos transitórios usando o método
transient
dentro da definição de fábrica. Por exemplo:Dessa forma,
full_name
é um atributo transitório e não será persistido no banco de dados quando você criar um objetoCustomer
. Você pode acessar e usar esse atributo transitório em seus testes, mas ele não será armazenado no banco de dados.Essa funcionalidade é útil para situações em que você precisa fornecer valores temporários ou calculados apenas para os propósitos dos testes, sem a necessidade de persisti-los no banco de dados.