stub_chain вместе с should_receive - PullRequest
       4

stub_chain вместе с should_receive

13 голосов
/ 24 ноября 2010

Я пытаюсь проверить, если в цепочке вызова метода один из методов получает определенный параметр. Например, в приведенном ниже коде MyModel должен получить параметр 0 для метода offset. К сожалению, приведенный ниже код не работает. Кажется, невозможно смешать must_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")

Обновление

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

1 Ответ

8 голосов
/ 13 марта 2011

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

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 установлены.

...