Ответ 1
Мне не совсем понятно, о чем вы спрашиваете, но я собираюсь предположить что-то вроде: "Если у меня есть класс, и я расширяю этот класс с помощью модуля, где я должен проверить функциональность, предоставляемая модулем?"
Лично, когда я пишу модуль для использования в качестве mixin, я пытаюсь убедиться, что он имеет довольно надежное тестирование независимо от любых классов, которые я, возможно, в конечном итоге планирую использовать для смешивания. Обычно я определяю класс в наборе тестов, который ничего не делает, кроме расширения модуля, а затем записывает тесты, чтобы гарантировать, что класс тестирования имеет все ожидаемые функциональные возможности. (Вы можете увидеть примеры этого в моем Classy gem, который представляет собой всего лишь набор модулей mixin.) Если модуль должен был расширяться ActiveRecord или какой-либо другой класс, в котором я не имел никакого контроля, я бы определил как ваниль класс ActiveRecord, насколько это возможно, и работать с ним, хотя в идеале я попытался бы сохранить функциональность модуля ортогональной по сравнению с ActiveRecord, когда это возможно.
Если изменения в ActiveRecord заставляют ваши тесты ломаться, тогда возникает вопрос, каковы ваши цели при написании вашего модуля. Если вы хотите, чтобы он был общедоступным и полезным для публики, то вы, вероятно, хотите, чтобы он работал с самой новой версией, и эти неудачные тесты точно сообщают о ошибках, которые нуждаются в исправлении. Если вы хотите, чтобы он работал с любой версией, которую вы запускаете локально для своего собственного проекта, вы можете просто запустить тесты с этой версией, и вам не придется беспокоиться об этом.
Предполагая, что у меня есть контроль над классом, в который вы смешались, я, вероятно, не буду тестировать функциональность из модуля слишком широко в тестах для класса - для чего предназначены тесты модулей. У меня будет тестовый пример или два, чтобы убедиться, что он вообще работает, и я бы тестировал любые специфические взаимодействия или тонкости, специфичные для тестируемого класса, и, возможно, оставил бы это на этом.