RSpec - Написание спецификаций

В этой главе мы создадим новый класс Ruby, сохраним его в отдельном файле и создадим отдельный файл спецификации для тестирования этого класса.

Во-первых, в нашем новом классе он называется StringAnalyzer. Это простой класс, который, как вы уже догадались, анализирует строки. У нашего класса всего один методhas_vowels?который, как следует из названия, возвращает true, если строка содержит гласные, и false, если нет. Вот реализация дляStringAnalyzer -

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

Если вы следили за разделом HelloWorld, вы создали папку под названием C: \ rspec_tutorial \ spec.

Удалите файл hello_world.rb, если он у вас есть, и сохраните приведенный выше код StringAnalyzer в файл с именем string_analyzer.rb в папке C: \ rspec_tutorial \ spec.

Вот источник нашего файла спецификации для тестирования 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

Сохраните его в том же каталоге spec, присвоив ему имя string_analyzer_test.rb.

В окне cmd.exe перейдите в папку C: \ rspec_tutorial и выполните эту команду: dir spec

Вы должны увидеть следующее -

Каталог 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

Теперь мы собираемся запустить наши тесты, запустим эту команду: rspec spec

Когда вы передаете имя папки в rspec, он запускает все файлы спецификаций внутри папки. Вы должны увидеть этот результат -

No examples found.

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

Причина этого в том, что по умолчанию rspecзапускает только файлы, имена которых заканчиваются на «_spec.rb». Переименуйте string_analyzer_test.rb в string_analyzer_spec.rb. Вы можете легко сделать это, выполнив эту команду -

ren spec\string_analyzer_test.rb string_analyzer_spec.rb

Теперь беги rspec spec снова, вы должны увидеть результат, который выглядит следующим образом -

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)

Теперь сохраните изменения, которые вы только что внесли в string_analyizer.rb, и снова запустите команду rspec spec, теперь вы должны увидеть результат, который выглядит так:

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

Поздравляем, примеры (тесты) в вашем файле спецификации теперь проходят. Мы исправили ошибку в регулярном выражении с методом гласных, но наши тесты далеки от завершения.

Имеет смысл добавить больше примеров, которые проверяют различные типы входных строк с помощью метода has vowels.

В следующей таблице показаны некоторые перестановки, которые могут быть добавлены в новые Примеры (он блокирует)

Строка ввода Описание Ожидаемый результат с has_vowels?
'aaa', 'eee', 'iii', 'o' Только одна гласная и никаких других букв. правда
'abcefg' 'Как минимум одна гласная и несколько согласных' правда
'mnklp' Только согласные. ложный
'' Пустая строка (без букв) ложный
'abcde55345 & ??' Гласные, согласные, цифры и знаки препинания. правда
'423432 %%% ^ &' Только цифры и знаки препинания. ложный
'AEIOU' Только гласные верхнего регистра. правда
'AeiOuuuA' Только верхний регистр и нижние гласные. правда
'AbCdEfghI' Гласные и согласные буквы верхнего и нижнего регистра. правда
'BCDFG' Только согласные в верхнем регистре. ложный
'' Только символы пробела. ложный

Вам решать, какие примеры добавить в свой файл спецификации. Есть много условий, которые нужно проверить, вам нужно определить, какое подмножество условий наиболее важно, и лучше всего протестировать ваш код.

В rspec команда предлагает множество различных опций, чтобы увидеть их все, введите rspec-Помогите. В следующей таблице перечислены наиболее популярные варианты и описано их назначение.

Sr.No. Параметр / флаг и описание
1

-I PATH

Добавляет PATH к пути загрузки (требуется), который rspec используется при поиске исходных файлов Ruby.

2

-r, --require PATH

Добавляет определенный исходный файл, который требуется в вашей спецификации. файл (ы).

3

--fail-fast

С этой опцией rspec перестанет запускать спецификации после сбоя первого примера. По умолчанию rspec запускает все указанные файлы спецификаций, независимо от количества сбоев.

4

-f, --format FORMATTER

Этот параметр позволяет указать различные форматы вывода. См. Раздел «Средства форматирования» для получения более подробной информации о форматах вывода.

5

-o, --out FILE

Эта опция указывает rspec записывать результаты теста в выходной файл FILE, а не в стандартный файл.

6

-c, --color

Включает цвет в выводе rspec. Успешные результаты примера будут отображаться зеленым текстом, а неудачные - красным.

7

-b, --backtrace

Отображает полную трассировку ошибок в выводе rspec.

8

-w, --warnings

Отображает предупреждения Ruby в выводе rspec.

9

-P, --pattern PATTERN

Загрузите и запустите файлы спецификации, соответствующие шаблону PATTERN. Например, если вы передадите -p «* .rb», rspec запустит все файлы Ruby, а не только те, которые заканчиваются на «_spec.rb».

10

-e, --example STRING

Эта опция указывает rspec запускать все Примеры, содержащие текст STRING в своих описаниях.

11

-t, --tag TAG

С этой опцией rspec будет запускать только примеры, содержащие тег TAG. Обратите внимание, что TAG указан как символ Ruby. См. Раздел «Теги RSpec» для получения более подробной информации.