rspec, 2 пути это то же самое? - PullRequest
0 голосов
/ 14 марта 2012
@sponge = Factory(:user)
let(:event_type) { EventType.where( name: 'visit_site').first 

ONE: => false при запуске теста

subject{ Event.new user: @sponge, event_type: event_type, points_earned: event_type.points_value, description: {}}

context 'call #update_user_points when create a event' do
   it{should_receive(:update_user_points)}
end

TWO: => true при запуске теста

it 'should call update_user_points after creation' do
   event = Event.new user: @sponge, event_type: event_type, points_earned:event_type.points_value, description: {}
   event.should_receive(:update_user_points)
   event.save
end

Дайте мне несколько советов, пожалуйста: D

1 Ответ

0 голосов
/ 14 марта 2012

Ваш второй пример отличается от вашего первого: они оба устанавливают ожидание сообщения для Event#update_user_points, но второй вызывает save после этого;первый - нет.

Я не думаю, что вы можете использовать should_receive с неявным субъектом, как вы пытаетесь сделать в первом примере.rspec, кажется, не жалуется, но я не думаю, что он делает то, что вы хотите.Для этого он делает следующее:

  1. Запускает блок темы, чтобы создать экземпляр события.
  2. Устанавливает ожидание сообщения о том, что субъект (вновь созданное событие) должен получитьupdate_user_points method.
  3. Затем он останавливается, потому что в примере ничего больше этого нет.

Сбой из-за того, что сообщение так и не было получено.

...