DEV Community

Abraão Carvalho
Abraão Carvalho

Posted on

Escrevendo Testes de maneira eficiente usando RSpec em Ruby on Rails

Como dito no artigo anterior, escrever testes eficientes utilizando é fundamental para garantir a qualidade e a estabilidade do seu código. RSpec é uma ferramenta de teste muito popular em Ruby, conhecida por sua legibilidade e expressividade. Abaixo, mostrarei maneiras eficientes de escrever testes usando RSpec.

Organização dos Testes

Divida seus testes em contextos lógicos usando "describe" e "context".

Agrupe testes relacionados usando "describe" para descrever o comportamento de uma classe ou método.

Use "context" para especificar diferentes cenários dentro de um mesmo contexto.

Por exemplo:

describe MyClass do
  context "when initialized" do
    it "has default attributes" do
      # test implementation
    end
  end

  context "when performing some action" do
    it "does something under certain conditions" do
      # test implementation
    end

    it "handles edge cases" do
      # test implementation
    end
  end
end
Enter fullscreen mode Exit fullscreen mode

Expectativas claras

Utilize "it" para descrever comportamentos esperados.

Use "expect" para declarar as expectativas do comportamento.

Por exemplo:

it "returns the sum of two numbers" do
  result = add(2, 3)
  expect(result).to eq(5)
end
Enter fullscreen mode Exit fullscreen mode

Configuração e Limpeza

Use "before" para configurar o estado inicial dos objetos antes dos testes.

Utilize "after" para limpar recursos ou estado após a execução de cada teste.

Por exemplo:

describe MyClass do
  before do
    @my_object = MyClass.new
  end

  it "performs some action" do
    # test implementation
  end

  after do
    # clean up resources
  end
end
Enter fullscreen mode Exit fullscreen mode

Matchers

RSpec fornece uma variedade de matchers para testar expectativas de maneira expressiva. Alguns exemplos incluem "eq", "be_truthy", "be_falsey", "be_nil", "include", entre outros.

Por exemplo:

it "checks if a number is even" do
  number = 4
  expect(number).to be_even
end
Enter fullscreen mode Exit fullscreen mode

Mocks e Stubs

Use mocks e stubs para isolar o código em teste de dependências externas. Evite testes que dependem de recursos externos, como bancos de dados ou APIs.

Por exemplo:

it "sends an email when a new user signs up" do
  user = build(:user) # Utilizando FactoryBot
  mailer = double("UserMailer")
  allow(UserMailer).to receive(:welcome_email).and_return(mailer)
  expect(mailer).to receive(:deliver_now)
  user.save
end
Enter fullscreen mode Exit fullscreen mode

Conclusão

A prática de escrever testes eficientes usando RSpec no Ruby on Rails é crucial para o desenvolvimento de software de qualidade. O artigo abrangeu várias técnicas e práticas recomendadas para criar testes robustos e confiáveis, garantindo que o código seja funcional, escalável e fácil de manter.

Top comments (3)

Collapse
 
mathibarreto profile image
mathias barreto •

"Evite testes que dependem de recursos externos, como bancos de dados ou APIs." Por que? Valeu por compartilhar, tope o artigo.

Collapse
 
abraaocrvlh42 profile image
Abraão Carvalho • • Edited

Evitar testes que dependem de recursos externos, como bancos de dados ou APIs, é uma prática comum na área de desenvolvimento de software por alguns motivos, como: Instabilidade, Lentidão, Custo etc...
Para mitigar esses problemas, os desenvolvedores frequentemente usam técnicas como mocks, stubs ou fakes para simular o comportamento dos recursos externos durante os testes. Isso permite que os testes sejam executados de forma rápida, confiável e independente dos recursos externos, garantindo assim a qualidade do software.

Collapse
 
mathibarreto profile image
mathias barreto •

valeu demais pelo lembrete maninho, parabéns