RSpec - Specifiche di scrittura

In questo capitolo, creeremo una nuova classe Ruby, la salveremo nel suo file e creeremo un file spec separato per testare questa classe.

Innanzitutto, nella nostra nuova classe, si chiama StringAnalyzer. È una classe semplice che, hai indovinato, analizza le stringhe. La nostra classe ha un solo metodohas_vowels?che, come suggerisce il nome, restituisce true se una stringa contiene vocali e false se non lo fa. Ecco l'implementazione perStringAnalyzer -

class StringAnalyzer 
   def has_vowels?(str) 
      !!(str =~ /[aeio]+/i) 
   end 
end

Se hai seguito la sezione HelloWorld, hai creato una cartella chiamata C: \ rspec_tutorial \ spec.

Elimina il file hello_world.rb se ce l'hai e salva il codice StringAnalyzer sopra in un file chiamato string_analyzer.rb nella cartella C: \ rspec_tutorial \ spec.

Ecco la fonte del nostro file delle specifiche per testare StringAnalyzer -

require 'string_analyzer' 

describe StringAnalyzer do 
   context "With valid input" do 
      
      it "should detect when a string contains vowels" do 
         sa = StringAnalyzer.new 
         test_string = 'uuu' 
         expect(sa.has_vowels? test_string).to be true 
      end 
		
      it "should detect when a string doesn't contain vowels" do 
         sa = StringAnalyzer.new 
         test_string = 'bcdfg' 
         expect(sa.has_vowels? test_string).to be false
      end 
      
   end 
end

Salvarlo nella stessa directory delle specifiche, assegnandogli il nome string_analyzer_test.rb.

Nella finestra cmd.exe, accedi alla cartella C: \ rspec_tutorial ed esegui questo comando: dir spec

Dovresti vedere quanto segue:

Directory di C: \ rspec_tutorial \ spec

09/13/2015 08:22 AM  <DIR>    .
09/13/2015 08:22 AM  <DIR>    ..
09/12/2015 11:44 PM                 81 string_analyzer.rb
09/12/2015 11:46 PM              451 string_analyzer_test.rb

Ora eseguiremo i nostri test, eseguiamo questo comando: rspec spec

Quando passi il nome di una cartella a rspec, esegue tutti i file delle specifiche all'interno della cartella. Dovresti vedere questo risultato -

No examples found.

Finished in 0 seconds (files took 0.068 seconds to load)
0 examples, 0 failures

Il motivo per cui ciò è accaduto è che, per impostazione predefinita, rspecesegue solo file i cui nomi terminano con "_spec.rb". Rinomina string_analyzer_test.rb in string_analyzer_spec.rb. Puoi farlo facilmente eseguendo questo comando:

ren spec\string_analyzer_test.rb string_analyzer_spec.rb

Adesso corri rspec di nuovo spec, dovresti vedere un output simile a questo -

F.
Failures:

   1) StringAnalyzer With valid input should detect when a string contains vowels
      Failure/Error: expect(sa.has_vowels? test_string).to be true 
         expected true
            got false
      # ./spec/string_analyzer_spec.rb:9:in `block (3 levels) in <top (required)>'

Finished in 0.015 seconds (files took 0.12201 seconds to load)
2 examples, 1 failure

Failed examples:
rspec ./spec/string_analyzer_spec.rb:6 # StringAnalyzer With valid 
   input should detect when a string contains vowels
Do you see what just happened? Our spec failed because we have a bug in 
   StringAnalyzer. The bug is simple to fix, open up string_analyzer.rb
   in a text editor and change this line:
!!(str =~ /[aeio]+/i)
to this:
!!(str =~ /[aeiou]+/i)

Ora, salva le modifiche che hai appena fatto in string_analyizer.rb ed esegui di nuovo il comando rspec spec, ora dovresti vedere l'output che assomiglia a -

..
Finished in 0.002 seconds (files took 0.11401 seconds to load)
2 examples, 0 failures

Congratulazioni, ora gli esempi (test) nel file delle specifiche vengono superati. Abbiamo corretto un bug nell'espressione regolare che ha il metodo delle vocali ma i nostri test sono lungi dall'essere completi.

Avrebbe senso aggiungere altri esempi che testino vari tipi di stringhe di input con il metodo has vowels.

La tabella seguente mostra alcune delle permutazioni che potrebbero essere aggiunte in nuovi esempi (blocca)

Stringa di input Descrizione Risultato previsto con has_vowels?
"aaa", "eee", "iii", "o" Solo una vocale e nessun'altra lettera. vero
"abcefg" 'Almeno una vocale e alcune consonanti' vero
"mnklp" Solo consonanti. falso
'' Stringa vuota (senza lettere) falso
"abcde55345 & ??" Vocali, consonanti, numeri e caratteri di punteggiatura. vero
"423432 %%% ^ &" Solo numeri e caratteri di punteggiatura. falso
"AEIOU" Solo vocali maiuscole. vero
"AeiOuuuA" Solo vocali maiuscole e minuscole. vero
"AbCdEfghI" Vocali e consonanti maiuscole e minuscole. vero
"BCDFG" Solo consonanti maiuscole. falso
'' Solo caratteri di spazio vuoto. falso

Sta a te decidere quali esempi aggiungere al file delle specifiche. Esistono molte condizioni da verificare, è necessario determinare quale sottoinsieme di condizioni è più importante e testare il codice al meglio.

Il rspec Il comando offre molte opzioni diverse, per vederle tutte, digita rspec-Aiuto. La tabella seguente elenca le opzioni più popolari e descrive cosa fanno.

Sr.No. Opzione / bandiera e descrizione
1

-I PATH

Aggiunge PATH al percorso di caricamento (richiesto) that rspec utilizza quando si cercano i file sorgenti di Ruby.

2

-r, --require PATH

Aggiunge un file di origine specifico da richiedere nelle specifiche. File).

3

--fail-fast

Con questa opzione, rspec interromperà l'esecuzione delle specifiche dopo che il primo esempio fallisce. Per impostazione predefinita, rspec esegue tutti i file spec specificati, indipendentemente dal numero di errori presenti.

4

-f, --format FORMATTER

Questa opzione consente di specificare diversi formati di output. Vedere la sezione sui formattatori per maggiori dettagli sui formati di output.

5

-o, --out FILE

Questa opzione indica a rspec di scrivere i risultati del test nel file di output FILE invece che nell'output standard.

6

-c, --color

Abilita il colore nell'output di rspec. I risultati di esempio riusciti verranno visualizzati in testo verde, gli errori verranno stampati in testo rosso.

7

-b, --backtrace

Visualizza tutti i backtrace degli errori nell'output di rspec.

8

-w, --warnings

Visualizza gli avvisi di Ruby nell'output di rspec.

9

-P, --pattern PATTERN

Carica ed esegui i file delle specifiche che corrispondono al pattern PATTERN. Ad esempio, se passi -p "* .rb", rspec eseguirà tutti i file Ruby, non solo quelli che terminano con "_spec.rb".

10

-e, --example STRING

Questa opzione indica a rspec di eseguire tutti gli esempi che contengono il testo STRING nelle loro descrizioni.

11

-t, --tag TAG

Con questa opzione, rspec eseguirà solo esempi che contengono il tag TAG. Nota che TAG è specificato come un simbolo Ruby. Vedere la sezione sui tag RSpec per maggiori dettagli.