Stub_chain вместе с should_receive

Я пытаюсь проверить, если в цепочке вызова метода один из методов получает определенный параметр. В приведенном ниже коде, например, MyModel должен получить параметр 0 для метода offset. К сожалению, приведенный ниже код не работает. Кажется, что нельзя смешивать should_receive и stub_chain. Как я могу это решить? Я использую RSpec 2.

MyModel.should_receive(:offset).with(0).stub_chain(:tag_counts, :offset, :limit, :order).and_return([]) # does not work!

Код, который я пытаюсь проверить:

tags = taggable.tag_counts.offset(page-1).limit(per_page).where(*where_clause).order("count DESC")

Update

Я также разместил вопрос о RSpec Google Group: Дэвид (создатель RSpec) ответил на это (спасибо Дэвиду): http://groups.google.com/group/rspec/browse_thread/thread/6b8394836d2390b0?hl=en

Ответы

Ответ 1

Это пример того, что я делаю сейчас в одной из моих спецификаций. Это немного неудобно (причина многих строк), но он работает:

SearchPaginationModel.stub(:tag_counts) { SearchPaginationModel }
SearchPaginationModel.should_receive(:offset).with(0) { SearchPaginationModel }
SearchPaginationModel.stub_chain(:limit, :where, :order) { [] }
SearchPaginationModel.stub_chain(:tag_counts, :where, :count).and_return(1)
SearchPaginationModel.search_tags(:page => "1")

Это, например, тесты в SearchPaginationModel.tag_counts.offset(0).limit(X).where(X).order(X), на самом деле offset 0.