Hoje vamos falar do método de classe .context que o RSpec disponibiliza.
Os links dos posts da série sobre Métodos do RSpec estão no final desse post.
A intenção do método .context é descrever todas as variações/fluxos que podem acontecer na funcionalidade/método que está sendo testado.
As variações podem ser diversas, tanto para casos de sucesso quanto para casos de falha, isso vai depender de como a sua funcionalidade/método deverá funcionar.
O método .context pode receber algumas opções de parâmetros como:
Os links dos posts da série sobre Métodos do RSpec estão no final desse post.
A intenção do método .context é descrever todas as variações/fluxos que podem acontecer na funcionalidade/método que está sendo testado.
As variações podem ser diversas, tanto para casos de sucesso quanto para casos de falha, isso vai depender de como a sua funcionalidade/método deverá funcionar.
O método .context pode receber algumas opções de parâmetros como:
#1. Uma String
context('When given valid params')
#2. Uma String com alguma descrição
context('Success Scenario', 'when given valid params')Essas descrições devem expressar uma conversa, uma variação da funcionalidade ou comportamento que está sendo testado. Ou seja, continuando a aplicar conceitos do BDD (Behavior Driven Development). Uma palavra muito utilizada para expressar essas variações é o quando/when. Essa palavra normalmente está presente sempre que você estiver escrevendo código/testes no estilo BDD.
Vamos analisar alguns exemplos de como aplicar o .context dentro de um cenário mais real:
RSpec.describe User, 'model' do
describe '.create' do
context 'When given valid params' do
end
end
describe '.update' do
context 'Success Scenario', 'when given valid params' do
end
context 'Fail Scenarios' do
context 'When given invalid params' do
end
context 'When the given user is nil' do
end
end
end
describe '.all' do
context 'When does NOT have any user' do
end
context 'When does have users' do
end
end
endAcima foram mostrados diversas formas de utilizar o context para diversos tipos de variações dos fluxos das funcionalidades. Perceba que todas as opções deixam a leitura dos testes e a funcionalidade bem clara, o que é o mais importante.
Você pode estar se perguntando: Qual dos estilos devo utilizar?
A resposta é simples e direta: A que você ler mais facilmente e que deixe claro a razão do teste, a funcionalidade e as variações que ela precisa ter.
Agrupar contexts também é interessante para quando for criar os setups necessários para o seu teste, ou seja, dados criados, variações de parâmetros, execuções etc. E que seja reutilizado para suas expectativas. Nos próximos posts dessa série, eu vou mostrar mais sobre esses setups e como eles podem ser reutilizados.
Quando for escrever seus testes, mapeie como as funcionalidades devem funcionar, os fluxos, as variações que podem acontecer. Feito isso, transcreva o que você mapeou para histórias que sejam fáceis de ler e compreender, como fizemos com alguns exemplos acima.
O mapeamento é um dos fundamentos para escrever bons testes.
Obrigado.
O mapeamento é um dos fundamentos para escrever bons testes.
Obrigado.
Posts da série sobre Métodos RSpec:
1. RSpec - Método `.describe`, como utilizá-lo de forma correta
2. RSpec - Método `.context`, como utilizá-lo de forma correta
3. RSpec - Método `.it`, como utilizá-lo de forma correta
2. RSpec - Método `.context`, como utilizá-lo de forma correta
3. RSpec - Método `.it`, como utilizá-lo de forma correta