Сегодня у меня возникла проблема с моими спецификациями RSpec и областями действия ActiveRecord.
У меня есть контроллер, который выполняет код, подобный этому
@customers = Customer.active.with_counts.order('name asc')
'active' и 'with_counts' являются областями действия для модели Customer.
Раньше у меня была спецификация, в которой использовался stub_chain:
Customer.stub_chain(:with_counts, :order).with('name asc') { [mock_customer] }
Я не ожидал, что это удастся, так как контроллер включал «активную» область, но, к моему удивлению, это удалось без каких-либо проблем.
Я полагаю, что "активный" контекст вызывается для реального класса Customer и возвращает что-то, с чем связывается stub_chain, и поэтому он, похоже, работает.
Как я могу написать свою спецификацию, чтобы избежать такого рода проблем при цепочке областей ActiveRecord?
Обратите внимание, что реальный вызов в контроллере не всегда будет использовать обе области - он зависит от фильтрации, поэтому простое завершение всего в новом методе - это не тот способ, которым я стремлюсь.