Что такое ключевое слово "должно" в RSpec Ruby
Я новичок в Ruby и долго задавал этот вопрос.
В файле RSpec, если мы пишем Book.should <do something>
, что такое ключевое слово should
? Является ли он членом объекта Book? Как он стал членом объекта книги? Или это какая-то конструкция Ruby? Это функция? Где я могу найти определение этого, если это функция или член?
Ответы
Ответ 1
При загрузке RSpec включает модуль в модуль Kernel
, который включен во все объекты, известные Ruby. Таким образом, он может сделать метод all доступным для всех объектов. Таким образом, should
не является ключевым словом (например, if
, class
или end
), а обычным методом.
Обратите внимание, что этот mixin доступен только в контекстах RSpec, поскольку он "пропатчен" во время загрузки или RSpec.
Ответ 2
Я ответил на подобный вопрос на этот здесь. В принципе:
Я думаю, что ответ Холгера может сделать более явным, и что может быть тем, что изначально вас смутило, заключается в том, что should
ломает большинство обычных условностей для имен методов (ничего об этом методе не описано, например, о том, что он делает) чтобы код в целом считался своего рода предложением.
Поэтому вместо того, чтобы просто создавать набор тестов, библиотека пытается побудить вас описать ваше приложение с помощью тестов таким образом, чтобы он соответствовал удобочитаемой спецификации.