В этом посте мы продолжим разбирать RSpec и поговорим о matchers.
“Matchers” не переводится с английского, но слово match в этом контексте означает “совпадать, равняться”.
Итак.
RSpec “вешает” методы to
и not_to
на все результаты ожиданий.
Эти два метода принимают один параметр — matcher.
Примеры matcher’ов:
be_true
/be_false
eq 3
raise_error(SomeError)
Be_predicate — логическое значение
Если объект, на котором проводится тест, имеет утвердительный (логический) метод, вы автоматически получите матчер be_predicate
.
Так что, к примеру, be_nil
является валидным матчером, так как каждый объект в Ruby имеет метод :nil?.
В нашем примере с калькулятором мы можем иметь такой тест:
it "should sum two odd numbers and become even" do
expect(@calculator.add(3, 3)).to be_even
expect(@calculator.add(3, 3)).not_to be_odd
end
Это полностью валидно и выглядит почти как естественный английский.
Так как мы исправили ошибки в калькуляторе, все тесты работают.
Но если вы хотите узнать подробнее, что работает, а что нет, введите rspec --format documentation
или rspec -f d
:
Больше матчеров
Полный список матчеров можно найти в документации RSpec.
https://relishapp.com/rspec/rspec-expectations/v/3-6/docs/built-in-matchers
В итоге
RSpec имеет множество встроенных матчеров, которые доступны для упрощения написания тестов, я думаю это отличный фреймворк для тестирования приложений.
Хотя если вы предпочитаете MiniTest, используйте его.