Rachid Calazans de Viveiros

June 29, 2021

RSpec - Método `.describe`, como utilizá-lo de forma correta

target-icon.png


RSpec é um framework de teste no estilo BDD (Behavior Driven Development - Desenvolvimento Orientado a Comportamento) que é escrita em Ruby para testar códigos Ruby.

Esse é o primeiro post sobre uma série que irei criar sobre os métodos do RSpec.

Os links dos posts da série sobre Métodos do RSpec estão no final desse post.

Hoje vamos falar do método de classe .describe que o RSpec disponibiliza.

Esse método serve para descrever o comportamento de algo que será testado. Uma classe, um método, uma funcionalidade.
Ele pode receber algumas opções de parâmetros como:

#1. Uma String
RSpec.describe('User model')  

#2. Uma Classe
RSpec.describe(User)  

#3. Uma Classe com alguma descrição
RSpec.describe(User, 'model')

No caso exemplificado estamos querendo descrever algo para o modelo de Usuário, ou seja, queremos descrever comportamentos desse modelo.

Para detalhar ainda mais ou especificar algum outro comportamento, é interessante utilizar outro .describe dentro do principal.


RSpec.describe User, 'model' do
  describe '.create' do
  end

  describe '.all' do
  end

  describe '#name' do
  end
end

Cada describe interno representa um comportamento específico para a classe User.
Dessa maneira o código fica claro que iremos testar comportamentos da classe, do objeto User, tais como a criação (método .create),
listagem (método .all) e informação do atributo nome (método #name).

Para detalhar as variações, os fluxos de sucesso e falha para cada teste (cada describe) será necessário adicionar outros métodos do RSpec como .context e .it.
Esses outros métodos irei detalhar mais em outros posts.

Os describes internos estão recebendo apenas String para descrever o que vai ser testado.
O padrão utilizado foi informar qual é o método do modelo User que está sendo testado.

Quando for um método de classe, utilize `.` como prefixo, exemplo .create, o que representa:
 User.create

Quando for um método de instância, utilize `#` como prefixo, exemplo #user, o que representa:
user = User.new(name: 'Rachid')
user.name # => 'Rachid'


Tenha em mente que estamos escrevendo testes no estilo BDD, ou seja, queremos expressar conceitos como uma conversa, um comportamento, uma funcionalidade de forma que qualquer desenvolvedor consiga ler de primeira e entender o que está sendo expressado.

Obrigado.


Posts da série sobre Métodos RSpec: