Closed vanderleipinto closed 7 months ago
Temos a possibilidade de usar o create e o build para usar o model. O create salva no BD e o build cria somente o objeto.
customer = create(:customer) # ou
customer = build(:customer)
Mas além desses dois métodos temos o __attributes_for__ ,ele vai trazer apenas os atributos em um Hash dos elementos do model.
No teste:
require 'rails_helper'
RSpec.describe Customer, type: :model do
it 'Usando o Attributes_for' do
attrs = attributes_for(:customer)
attrs1 = attributes_for(:customer_vip)
attrs2 = attributes_for(:customer_default)
p attrs #mostra a hash de atributos
p attrs1
p attrs2
customer = Customer.build(attrs)
expect(customer.full_name).to start_with("Sr.")
end
end
O método
attributes_for
no RSpec é usado para criar um hash de atributos de um modelo em vez de criar efetivamente um registro no banco de dados. Isso é útil em testes onde você precisa apenas dos atributos de um objeto de modelo, sem a necessidade de persistir esses dados no banco de dados.Quando você usa
attributes_for
, o RSpec cria um hash com os atributos especificados, que pode ser usado para construir ou criar objetos de modelo em seus testes de forma mais eficiente.Por exemplo, suponha que você tenha um modelo
Customer
com os atributosname
eemail
, e você queira testar um controlador que cria um novoCustomer
. Em vez de usarcreate
para criar um registro no banco de dados, você pode usarattributes_for
para criar apenas um hash com os atributos:Este código irá gerar um hash com os atributos
name
eemail
de umCustomer
. Você pode então passar este hash para o métodopost
(ou outro método HTTP, dependendo da ação do controlador que está sendo testada) como os parâmetros do objeto a ser criado, como este:Isso permite que você teste a criação de objetos de modelo no seu controlador sem a necessidade de persistir dados no banco de dados durante os testes, o que pode tornar os testes mais rápidos e mais isolados.