Учебники

RSpec — Matchers

Если вы помните наш оригинальный пример Hello World, он содержал строку, которая выглядела так:

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

Ключевое слово eql — это RSpec «matcher». Здесь мы представим другие типы сопоставителей в RSpec.

Равенство / Идентичность

Сопоставители для проверки на предмет или равенство значений.

Сличитель Описание пример
уравнение Проходит, когда актуально == ожидается ожидаемый (фактический). к ожидаемому
EQL Проходит, когда актуально. ожидаемый (фактический). до ожидаемого
быть Проходит, когда актуально. ожидать (факт). быть ожидаемым
равный Также проходит, когда фактический.?? (Ожидается) ожидаемый (фактический). равный ожидаемому

пример

describe "An example of the equality Matchers" do 

   it "should show how the equality Matchers work" do 
      a = "test string" 
      b = a 
      
      # The following Expectations will all pass 
      expect(a).to eq "test string" 
      expect(a).to eql "test string" 
      expect(a).to be b 
      expect(a).to equal b 
   end
   
end

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

.
Finished in 0.036 seconds (files took 0.11901 seconds to load)
1 example, 0 failures

Сравнители

Сопоставители для сравнения со значениями.

Сличитель Описание пример
> Проходит, когда факт> ожидается ожидать (фактическое). быть> ожидаемым
> = Проходит, когда актуально> = ожидается ожидать (фактическое). быть> = ожидается
< Проходит, когда фактический <ожидается ожидать (фактическое). быть <ожидается
<= Проходит, когда фактический <= ожидаемый ожидать (фактическое). быть <= ожидается
be_between включительно Проходит, когда фактическое значение <= min и> = max ожидаемый (фактический) .в be_between (min, max) .inclusive
be_between эксклюзив Проходит, когда фактический <min и> max ожидаемый (фактический) .в be_between (min, max) .exclusive
матч Проходит, когда фактическое соответствует регулярному выражению ожидать (фактическое). к совпадению (/ regex /)

пример

describe "An example of the comparison Matchers" do

   it "should show how the comparison Matchers work" do
      a = 1
      b = 2
      c = 3		
      d = 'test string'
      
      # The following Expectations will all pass
      expect(b).to be > a
      expect(a).to be >= a 
      expect(a).to be < b 
      expect(b).to be <= b 
      expect(c).to be_between(1,3).inclusive 
      expect(b).to be_between(1,3).exclusive 
      expect(d).to match /TEST/i 
   end
   
end

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

. 
Finished in 0.013 seconds (files took 0.11801 seconds to load) 
1 example, 0 failures

Сопоставители классов / типов

Сопоставители для проверки типа или класса объектов.

Сличитель Описание пример
be_instance_of Проходит, когда фактический является экземпляром ожидаемого класса. ожидаемый (фактический) .в be_instance_of (ожидаемый)
be_kind_of Проходит, когда фактический является экземпляром ожидаемого класса или любого из его родительских классов. ожидаемый (фактический) .to be_kind_of (ожидаемый)
respond_to Проходит, когда фактическое отвечает на указанный метод. ожидаемый (фактический) .to response_to (ожидаемый)

пример

describe "An example of the type/class Matchers" do
 
   it "should show how the type/class Matchers work" do
      x = 1 
      y = 3.14 
      z = 'test string' 
      
      # The following Expectations will all pass
      expect(x).to be_instance_of Fixnum 
      expect(y).to be_kind_of Numeric 
      expect(z).to respond_to(:length) 
   end
   
end

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

. 
Finished in 0.002 seconds (files took 0.12201 seconds to load) 
1 example, 0 failures

True / False / Nil Matchers

Соответствует для проверки, является ли значение истинным, ложным или нулевым.

Сличитель Описание пример
быть правдой Проходит, когда актуально == правда ожидать (фактическое). быть правдой
быть ложным Проходит, когда актуально == ложно ожидать (фактическое). быть ложным
be_truthy Проходит, когда фактический не ложь или ноль ожидать (фактическое). to be_truthy
be_falsey Проходит, когда фактическое значение равно false или равно нулю ожидать (фактический) .в be_falsey
be_nil Проходит, когда фактический ноль ожидать (фактический) .в be_nil

пример

describe "An example of the true/false/nil Matchers" do
   it "should show how the true/false/nil Matchers work" do
      x = true 
      y = false 
      z = nil 
      a = "test string" 
      
      # The following Expectations will all pass
      expect(x).to be true 
      expect(y).to be false 
      expect(a).to be_truthy 
      expect(z).to be_falsey 
      expect(z).to be_nil 
   end 
end

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

. 
Finished in 0.003 seconds (files took 0.12301 seconds to load) 
1 example, 0 failures

Сопоставление ошибок

Сопоставители для тестирования, когда блок кода вызывает ошибку.

Сличитель Описание пример
raise_error (ErrorClass) Проходит, когда блок вызывает ошибку типа ErrorClass. ожидать {блок} .в поднять_ошибку (ErrorClass)
повышение_ответа («сообщение об ошибке») Проходит, когда блок выдает ошибку с сообщением «error error». Ожидаем {block} .to повысить_error («сообщение об ошибке»)
повышение_еррор (ErrorClass, «сообщение об ошибке») Проходит, когда блок выдает ошибку типа ErrorClass с сообщением «error error» wait {block} .to повысить_error (ErrorClass, «сообщение об ошибке»)

пример

Сохраните следующий код в файл с именем error_matcher_spec.rb и запустите его с помощью этой команды — rspec error_matcher_spec.rb .

describe "An example of the error Matchers" do 
   it "should show how the error Matchers work" do 
      
      # The following Expectations will all pass 
      expect { 1/0 }.to raise_error(ZeroDivisionError)
      expect { 1/0 }.to raise_error("divided by 0") 
      expect { 1/0 }.to raise_error("divided by 0", ZeroDivisionError) 
   end 
end

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