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.