Barauna Hugo - Cucumber e RSpec стр 6.

Шрифт
Фон

Ao começar o jogo, é mostrada a mensagem inicial para o jogador.

Quando começo um novo jogo

Então vejo a seguinte mensagem na tela:

"""

Bem vindo ao jogo da forca!

"""

Esse é um exemplo real de especificação de software com Cucumber. A spec

tem o título da funcionalidade, uma narrativa explicando o contexto e por fim um

cenário de teste, mostrando um exemplo de como o software irá funcionar do ponto

de vista do usuário final.

Cenários em português

Diferentemente de quando escrevemos as especificações com o RS-

pec, onde misturávamos código e texto, com o Cucumber escrevemos

apenas texto para descrever os cenários. Isso remove qualquer ruído que

a linguagem de programação pudesse causar na descrição e dessa forma,

faz com que escrever em linguagem natural seja algo bem simples e di-

reto.

Durante o livro, para os cenários em cucumber, usaremos sempre o

português.

Perceba como a especificação é bem simples e clara. O cliente então lê a spec e

confirma que o entendimento está correto. Você pode agora ir em frente e desen-

volver essa funcionalidade. Uma das vantagens de utilizar o Cucumber é que você

14

Casa do Código

Capítulo 2. Primeiros passos com RSpec e Cucumber

pode usar essa mesma documentação para criar um cenário de teste de aceitação

automatizado. Vamos fazer isso.

Antes de tudo, precisamos instalar o Cucumber. Como ele também é distribuído

como uma gem, basta executar no seu console:

$ gem install cucumber

Agora crie um novo diretório chamado hello-cucumber e dentro dele crie

um outro diretório chamado features. Dentro desse diretório features, crie

um arquivo chamado features/comecar_jogo.feature e salve dentro dele o

conteúdo da especificação que fizemos há pouco. Agora você já pode rodar o Cu-

cumber.

Para fazer isso, dentro do diretório hello-cucumber, execute o comando

cucumber no seu console:

$ cucumber

Isso fará com que os cenários sejam executados e a seguinte saída apareça como

resultado:

# language: pt

Funcionalidade: Começar jogo

Para poder passar o tempo

Como jogador

Quero poder começar um novo jogo

Cenário: Começo de novo jogo com sucesso

Ao começar o jogo, é mostrada a mensagem inicial para o jogador.

Quando começo um novo jogo

Então vejo a seguinte mensagem na tela:

"""

Bem vindo ao jogo da forca!

"""

1 scenario (1 undefined)

2 steps (2 undefined)

0m0.002s

You can implement step definitions for undefined steps with these

snippets:

15

2.2. Olá Cucumber

Casa do Código

Quando /^começo um novo jogo$/ do

pending # express the regexp above with the code you wish you had

end

Então /^vejo a seguinte mensagem na tela:$/ do |string|

pending # express the regexp above with the code you wish you had

end

Vamos analisar um pouco a saída do Cucumber. Logo depois do texto da espe-

cificação em si, vemos o seguinte:

1 scenario (1 undefined)

2 steps (2 undefined)

Perceba que ele diz que temos um cenário que está indefinido e que existem dois

steps também indefinidos. Em specs de Cucumber, cada caso de teste é um cenário e

cada cenário é composto por vários steps.

No nosso caso, temos o cenário "Começo de novo jogo com sucesso que contém os steps "Quando começo um novo jogo e

"Então vejo a seguinte mensagem na tela: (...).

16

Casa do Código

Capítulo 2. Primeiros passos com RSpec e Cucumber

Figura 2.5: Estrutura de uma especificação com Cucumber

Para utilizar essa documentação como um teste automatizado, temos que definir

cada um desses steps, implementando o que o Cucumber chama de step definitions.

Basicamente é dizer ao Cucumber o que ele precisa fazer naquele passo. O legal é

que se o step ainda está indefinido, o próprio Cucumber já nos dá um snippet de

step definition, como pudemos ver no final da saída:

$ cucumber

(...)

You can implement step definitions for undefined steps with these

snippets:

Quando /^começo um novo jogo$/ do

pending # express the regexp above with the code you wish you had

end

Então /^vejo a seguinte mensagem na tela:$/ do |string|

17

2.2. Olá Cucumber

Casa do Código

pending # express the regexp above with the code you wish you had

end

Vamos agora automatizar nossa especificação. Primeiro crie um diretório dentro

do features e vamos chamá-lo de step_definitions. Dentro desse diretório

crie um arquivo chamado game_steps.rb. Nesse arquivo vamos colocar os step

definitions dos dois que temos na nossa spec. Implemente esses steps do seguinte

modo nesse arquivo:

# encoding: UTF-8

Quando /^começo um novo jogo$/ do

@game = Game.new

@game.start

end

Então /^vejo a seguinte mensagem na tela:$/ do |text|

expect(@game.output).to include(text)

end

O que fizemos foi implementar os step definitions, definindo quais partes da API

do nosso software cada step definition vai utilizar.

Para o step de começar um novo jogo, imaginamos que poderíamos ter um

objeto

@game e que para começar um novo jogo bastaria chamar o método

game.start.

No segundo step definition, estamos verificando se o output do @game contém

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке