2012-03-14 33 views
0
@sponge = Factory(:user) 
let(:event_type) { EventType.where(name: 'visit_site').first 

ONE: =>假,當運行測試rspec,2種方式是一樣的嗎?

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 

二: =>真當運行測試

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

回答

0

你的第二個例子與你的第一個例子不一樣:它們都建立了一個消息期望f或Event#update_user_points,但第二個在此之後調用save;第一個沒有。

我不認爲你可以使用should_receive一個隱含的主題,正如你在第一個例子中所做的那樣。 rspec似乎沒有抱怨,但我不認爲它做你想要的。爲此,它這樣做:

  1. 運行主題塊以實例化事件。
  2. 設置消息期望,說主題(新創建的事件)應該接收update_user_points方法。
  3. 然後停下來,因爲這個例子除此之外沒有任何東西。

它失敗,因爲郵件從未收到。

+0

我明白rspec中的一個小例子,爲什麼我們必須在「event.save」之前放置「should_receive」。我認爲它在創建事件後運行update_user_points,它應該在那之後放置?而我雖然第一種方式必須運行良好? 你能帶我學些關於RSpec的東西給初學者嗎? 謝謝:D – 2012-03-15 01:47:54

相關問題