Что такое ключевое слово "должно" в 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 ломает большинство обычных условностей для имен методов (ничего об этом методе не описано, например, о том, что он делает) чтобы код в целом считался своего рода предложением.

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