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