Closed vanderleipinto closed 7 months ago
Para usar esse artifício, criaremos um novo campo no migrations de Customers.
class CreateCustomers < ActiveRecord::Migration[7.1]
def change
create_table :customers do |t|
t.string :name
t.string :email
t.boolean :vip
t.integer :days_to_pay
t.string :gender
t.string :adress
t.timestamps
end
end
end
Agora faremos com que esse campo seja obrigatório em app/models/customer.rb
class Customer < ApplicationRecord
has_many :orders
validates :address, presence:true
def full_name
"Sr. #{name}"
end
end
Reconfigurando o banco de dados.
rails db:drop db:create db:migrate
O testes feitos no rspec dependem muito dos campos que existem ou deixem de existir.
Então se fizermos os testes depois de adicionar address.
Adicionando um faker adress: spec/factories/customers.rb
address {Faker::Address.street_address}
O factorybot lint verifica as validações dos testes e avisa quando ocorre.
Para isso devem ser feitas alterações no arquivo spec/spec_helper.rb
RSpec.configure do |config|
...
config.before(:suite) do #verifica se está faltando alguma coisa nos models.
FactoryBot.lint
end
...
end
Dessa maneira se ocorrer o erro de faltar algum campo do model ele vai explicitar de uma maneira mais legível.
Exemplo de erro
Exemplo do erro quando suprimimos o campo address (#address {Faker::Address.street_address}
)
An error occurred in a `before(:suite)` hook.
Failure/Error: FactoryBot.lint
FactoryBot::InvalidFactoryError:
The following factories are invalid:
* customer - Validation failed: Address can't be blank (ActiveRecord::RecordInvalid)
* customer_with_orders - Validation failed: Address can't be blank (ActiveRecord::RecordInvalid)
* customer_male - Validation failed: Address can't be blank (ActiveRecord::RecordInvalid)
* customer_female - Validation failed: Address can't be blank (ActiveRecord::RecordInvalid)
* customer_vip - Validation failed: Address can't be blank (ActiveRecord::RecordInvalid)
* customer_default - Validation failed: Address can't be blank (ActiveRecord::RecordInvalid)
...
# ./spec/spec_helper.rb:33:in `block (2 levels) in <main>'
# -e:1:in `<main>'
Finished in 0.23674 seconds (files took 0.17039 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
O FactoryBot Lint é uma ferramenta integrada ao FactoryBot. Ela serve para analisar suas fábricas de teste e detectar potenciais problemas, similar a como um linter (verificador de qualidade de código) funciona no código regular.
O que o FactoryBot Lint faz
Benefícios
Como executar
Executar o comando: No seu terminal, execute o seguinte comandoodo diretório raiz do projeto:
Você pode especificar fábricas específicas ou verificar todo o conjunto.
Exemplo de output
Se houver algum problema ou possível melhoria, o FactoryBot Lint irá listar e sugerir as correções necessárias.
Dica extra:
Documentação oficial: