Как добавить несколько ожиданий should_receive для объекта с использованием RSpec? - PullRequest
31 голосов
/ 28 октября 2008

В моем контроллере Rails я создаю несколько экземпляров одного и того же класса модели. Я хочу добавить некоторые ожидания RSpec, чтобы я мог проверить, что он создает правильный номер с правильными параметрами. Итак, вот что у меня есть в моей спецификации:

Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => @user.id, :position_id => 1, :is_leader => true)
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "2222", :position_id => 2)
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "3333", :position_id => 3)
Bandmate.should_receive(:create).with(:band_id => @band.id, :user_id => "4444", :position_id => 4)

Это вызывает проблемы, потому что кажется, что у класса Bandmate может быть установлено только 1 ожидание "should_receive". Итак, когда я запускаю пример, я получаю следующую ошибку:

Spec::Mocks::MockExpectationError in 'BandsController should create all the bandmates when created'
Mock 'Class' expected :create with ({:band_id=>1014, :user_id=>999, :position_id=>1, :is_leader=>true}) but received it with ({:band_id=>1014, :user_id=>"2222", :position_id=>"2"})

Это правильные параметры для второго вызова для создания, но RSpec проверяет на неправильные параметры.

Кто-нибудь знает, как я могу настроить свои ожидания "следует-принимать", чтобы разрешить несколько разных вызовов?

Ответы [ 2 ]

36 голосов
/ 30 октября 2008

Многочисленные ожидания не проблема вообще. То, с чем вы сталкиваетесь, это проблемы с заказом, учитывая ваши конкретные аргументы в отношении неупорядоченных ожиданий. Проверьте на этой странице для получения подробной информации об ожидаемых заказах.

Короче говоря, вы должны добавить .ordered в конец каждого из ваших ожиданий.

0 голосов
/ 03 марта 2011

Счетчик при получении ложных сообщений

my_mock.should_receive (: SYM) .once
my_mock.should_receive (: SYM) .twice
my_mock.should_receive (: SYM) .exactly (п) & bull;
my_mock.should_receive (: SYM) .at_least (: один раз)
my_mock.should_receive (: SYM) .at_least (: дважды)
my_mock.should_receive (: SYM) .at_least (п) & bull;
my_mock.should_receive (: SYM) .at_most (: один раз)
my_mock.should_receive (: SYM) .at_most (: дважды)
my_mock.should_receive (: SYM) .at_most (п) & bull;
my_mock.should_receive (: sym) .any_number_of_times

Работает и для rspec 2.5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...