Если ваши спецификации становятся слишком большими, вероятно, ваша модель также слишком велика - поскольку вы использовали здесь «UserSpec», вы можете сказать, что ваш класс пользователя - « God class ».То есть, это слишком много.
Итак, я бы разбил это на гораздо меньшие классы, каждый из которых несет одну ответственность.Затем протестируйте эти классы изолированно.
Что вы можете обнаружить, так это то, что ваш класс User знает, как выполнять большую часть логики в вашей системе - это простая ловушка, в которую можно попасть, но ее можно избежать, если вы поставитеваша логика в классе, который принимает пользователя в качестве аргумента ... Также, если вы неукоснительно соблюдаете закон деметры (когда ваш пользовательский класс может касаться только одного уровня ниже, но не двух).
Дальнейшее чтение: http://blog.rubybestpractices.com/posts/gregory/055-issue-23-solid-design.html