vanderleipinto / test_app

0 stars 0 forks source link

Callbacks #18

Closed vanderleipinto closed 7 months ago

vanderleipinto commented 7 months ago

Video

Callbacks no Ruby on Rails com RSpec

Em Ruby on Rails, callbacks são métodos especiais que são executados automaticamente em momentos específicos do ciclo de vida de um objeto, como antes ou depois de salvar, criar ou destruir um registro no banco de dados. Eles permitem adicionar funcionalidades personalizadas a esses eventos, como validações adicionais, envio de notificações ou lógica específica do seu aplicativo.

No RSpec, você pode testar callbacks usando as seguintes técnicas:

1. Testes de Unidade:

Exemplo:

class User < ApplicationRecord
  before_save :send_welcome_email

  def send_welcome_email
    # Envia email de boas-vindas
  end
end

RSpec.describe User, type: :model do
  it "should send a welcome email before save" do
    user = User.new(email: "johndoe@example.com")

    expect(user).to receive(:send_welcome_email)

    user.save

    # Verifica se o email foi enviado
  end
end

2. Testes de Integração:

Exemplo:

# Simula envio de formulário
feature "Criar novo usuário" do
  scenario "envia um email de boas-vindas após a criação" do
    visit new_user_path

    fill_in "Email", with: "johndoe@example.com"
    click_on "Criar"

    # Verifica se o email foi enviado
  end
end

3. Stubs e Mocks:

Exemplo:

class User < ApplicationRecord
  before_save :send_welcome_email

  def send_welcome_email
    # Envia email de boas-vindas
  end
end

RSpec.describe User, type: :model do
  it "should send a welcome email before save" do
    user = User.new(email: "johndoe@example.com")

    # Stub do método send_welcome_email
    allow(user).to receive(:send_welcome_email)

    user.save

    # Verifica se o stub foi chamado
    expect(user).to have_received(:send_welcome_email)
  end
end

Recursos adicionais:

Dicas:

Espero que esta resposta tenha ajudado a entender os callbacks no Ruby on Rails e como testá-los com o RSpec!

vanderleipinto commented 7 months ago

Utilizamos um callback no factory chamado after(:create):

after(:create) do |customer, evaluator|  #executa essa ação após criar o objeto.
      customer.name.upcase! if evaluator.upcased #transforma em maiusculo se upcased == true
    end 

Mas existem outras opções de callback:

   after(:build) # depois de ser criado em memória com o build ou create

   #before and after(:create) antes e depois de salvar efetivamente.