Учебники

RSpec – основной синтаксис

Давайте внимательнее посмотрим на код нашего примера HelloWorld . Прежде всего, если неясно, мы тестируем функциональность класса HelloWorld . Это, конечно, очень простой класс, который содержит только один метод say_hello () .

Вот снова код RSpec –

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

Описание Ключевое слово

Слово description является ключевым словом RSpec. Он используется для определения «группы примеров». Вы можете думать о «Группе примеров» как о наборе тестов. Ключевое слово description может принимать имя класса и / или строковый аргумент. Вам также нужно передать аргумент блока для описания , который будет содержать отдельные тесты или, как они известны в RSpec, «Примеры». Блок – это просто блок Ruby, обозначенный ключевыми словами Ruby do / end .

Ключевое слово контекста

Контекстное ключевое слово похоже на описание . Он также может принимать имя класса и / или строковый аргумент. Вы должны также использовать блок с контекстом . Идея контекста заключается в том, что он включает тесты определенного типа.

Например, вы можете указать группы примеров с различным контекстом, как это –

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”

Ключевое слово context не является обязательным, но оно помогает добавить больше деталей о примерах, которые оно содержит.

Ключевое слово

Слово это другое ключевое слово RSpec, которое используется для определения «примера». Примером является в основном тест или контрольный пример. Опять же, как description и context, он принимает как имя класса, так и строковые аргументы и должен использоваться с аргументом блока, обозначенным do / end . В этом случае принято передавать только строку и аргумент блока. Строковый аргумент часто использует слово «следует» и предназначен для описания того, какое конкретное поведение должно происходить внутри блока it . Другими словами, он описывает ожидаемый результат для примера.

Обратите внимание на блок it из нашего примера HelloWorld –

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

Строка проясняет, что должно произойти, когда мы вызываем команду hello в экземпляре класса HelloWorld. Эта часть философии RSpec, Пример – это не просто тест, это также спецификация (спецификация). Другими словами, Пример документирует и тестирует ожидаемое поведение вашего кода Ruby.

Ожидаемое ключевое слово

Ключевое слово wait используется для определения «Ожидания» в RSpec. Это этап проверки, на котором мы проверяем, что определенное ожидаемое условие выполнено.

Из нашего примера HelloWorld, мы имеем –

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

Идея с ожидаемыми утверждениями заключается в том, что они читаются как нормальный английский. Вы можете сказать это вслух как «Ожидайте, что переменное сообщение будет равно строке« Hello World »». Идея заключается в том, что он описательный, а также легко читаемый, даже для нетехнических заинтересованных сторон, таких как менеджеры проектов.

The to keyword

Ключевое слово to используется как часть ожиданий . Обратите внимание, что вы также можете использовать ключевое слово not_to, чтобы выразить обратное, когда вы хотите, чтобы Ожидание было ложным. Вы можете видеть, что to используется с точкой, ожидаем (message) .to, потому что это на самом деле обычный метод Ruby. На самом деле все ключевые слова RSpec на самом деле являются просто методами Ruby.

The eql keyword

Ключевое слово eql – это специальное ключевое слово RSpec, называемое Matcher. Вы используете Matchers, чтобы указать, какой тип условия вы проверяете, чтобы быть истинным (или ложным).

В нашем ожидании HelloWorld ясно, что eql означает равенство строк. Обратите внимание, что в Ruby существуют различные типы операторов равенства и, следовательно, разные соответствующие Matchers в RSpec. Мы рассмотрим множество различных типов Matchers в следующем разделе.