RSpec - Sintaxe Básica

Vamos dar uma olhada no código de nosso HelloWorldexemplo. Em primeiro lugar, caso não esteja claro, estamos testando a funcionalidade doHelloWorldclasse. Obviamente, esta é uma classe muito simples que contém apenas um métodosay_hello().

Aqui está o código RSpec novamente -

describe HelloWorld do 
   context “When testing the HelloWorld class” do 
      
      it "The say_hello method should return 'Hello World'" do 
         hw = HelloWorld.new 
         message = hw.say_hello 
         expect(message).to eq "Hello World!" 
      end
      
   end 
end

A descrever palavra-chave

A palavra describeé uma palavra-chave RSpec. É usado para definir um “Grupo de exemplo”. Você pode pensar em um “Grupo de exemplo” como uma coleção de testes. odescribepalavra-chave pode receber um nome de classe e / ou argumento de string. Você também precisa passar um argumento de bloco paradescribe, este conterá os testes individuais, ou como são conhecidos no RSpec, os “Exemplos”. O bloco é apenas um bloco Ruby designado pelo Rubydo/end palavras-chave.

A palavra-chave de contexto

o context palavra-chave é semelhante a describe. Ele também pode aceitar um nome de classe e / ou argumento de string. Você deve usar um bloco comcontexttambém. A ideia de contexto é que ele inclui testes de um certo tipo.

Por exemplo, você pode especificar grupos de exemplos com contextos diferentes como este -

context “When passing bad parameters to the foobar() method” 
context “When passing valid parameters to the foobar() method” 
context “When testing corner cases with the foobar() method”

o context palavra-chave não é obrigatória, mas ajuda a adicionar mais detalhes sobre os exemplos que ela contém.

A palavra-chave it

A palavra ité outra palavra-chave RSpec que é usada para definir um “Exemplo”. Um exemplo é basicamente um teste ou caso de teste. De novo comodescribe e context, it aceita o nome da classe e os argumentos da string e deve ser usado com um argumento de bloco, designado com do/end. No caso deit, é comum passar apenas uma string e um argumento de bloco. O argumento string geralmente usa a palavra "deveria" e se destina a descrever qual comportamento específico deve acontecer dentro doit block. Em outras palavras, descreve que o resultado esperado é para o exemplo.

Note o it block do nosso exemplo HelloWorld -

it "The say_hello method should return 'Hello World'" do

A string deixa claro o que deve acontecer quando chamamos say hello em uma instância da classe HelloWorld. Esta parte da filosofia RSpec, um exemplo não é apenas um teste, é também uma especificação (uma especificação). Em outras palavras, um exemplo documenta e testa o comportamento esperado de seu código Ruby.

A palavra-chave esperada

o expectpalavra-chave é usada para definir uma “expectativa” em RSpec. Esta é uma etapa de verificação em que verificamos se uma condição esperada específica foi atendida.

Do nosso exemplo HelloWorld, temos -

expect(message).to eql "Hello World!"

A ideia com expectafirmações é que eles são lidos como inglês normal. Você pode dizer isso em voz alta como “Espere que a mensagem da variável seja igual à string 'Hello World'”. A ideia é que seja descritiva e também fácil de ler, mesmo para partes interessadas não técnicas, como gerentes de projeto.

The to keyword

o to palavra-chave é usada como parte de expectafirmações. Observe que você também pode usar onot_topalavra-chave para expressar o oposto, quando você deseja que a expectativa seja falsa. Você pode ver que para é usado com um ponto,expect(message).to,porque na verdade é apenas um método Ruby normal. Na verdade, todas as palavras-chave RSpec são apenas métodos Ruby.

The eql keyword

o eqlpalavra-chave é uma palavra-chave RSpec especial chamada Matcher. Você usa Matchers para especificar que tipo de condição você está testando como verdadeira (ou falsa).

Em nosso HelloWorld expect declaração, é claro que eqlsignifica igualdade de string. Observe que existem diferentes tipos de operadores de igualdade em Ruby e, consequentemente, diferentes Matchers correspondentes em RSpec. Exploraremos os muitos tipos diferentes de Matchers em uma seção posterior.