Rails 3, RSpec 2.5: Использование should_receive или stub_chain с именованными областями действия

Я использую 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 .

12
задан Jens 22 April 2011 в 06:44
поделиться