2012-03-14 38 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

相关问题