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})
#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
Para usar esse artifício, criaremos um novo campo no migrations de Customers.
Agora faremos com que esse campo seja obrigatório em app/models/customer.rb
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
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
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}
)