Я использую Rails 3.0.4 и RSpec 2.5. В моих контроллерах я активно использую именованные области, например
@collection = GuestbookEntry.nonreplies.bydate.inclusive.paginate(
:page => params[:page], :conditions => { ... })
В моих тестах я хочу иметь возможность смоделировать результат такого запроса, а не формулировку . Я не думаю, что имеет смысл делать что-то вроде
GuestbookEntry.stub_chain(:nonreplies, :bydate, ...).and_return(...)
потому что этот тест не пройдёт в тот момент, когда я решу изменить порядок именованных областей.
С Rails 2.3 и RSpec 1.x это работало нормально: я мог написать
GuestbookEntry.should_receive(:find).with(:all, :conditions => { ... })
и вышеуказанный вызов будет перехвачен и правильно обработан. Однако с Rails 3 по какой-то причине это больше не работает.
Почему? Как мне установить ожидания или заглушки для результата вложенных областей? Поскольку все в ActiveModel в Rails 3 является именованной областью (благодаря ARel), это должно быть как-то возможно, иначе тесты действительно будут очень хрупкими.
Спасибо!
Обновление: См. Также отчет о проблеме на GitHub .