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

ONE: => falseをテスト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 

TWO

実行すると: =>真のテストを実行したときに

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

2番目の例は、最初の例と同じではありません。両方とも、メッセージの期待値fまたはEvent#update_user_pointsですが、2番目はそれ以降はsaveです。最初はありません。

should_receiveを暗黙的な件名に使用することはできません。最初の例のようにしてください。 rspecは文句を言っていないようですが、私はそれがあなたが望んでいるとは思わないと思います。これを順番に実行します。

  1. イベントをインスタンス化するためにサブジェクトブロックを実行します。
  2. 件名(新しく作成されたイベント)がupdate_user_pointsメソッドを受け取るべきであるというメッセージを設定します。
  3. この例ではそれ以上のものがないため、停止します。

メッセージが受信されなかったために失敗します。

+0

私はrspecのlitteを理解しています。なぜなら、 "event.save"の前に "should_receive"を置かなければならない理由の例です。私はそれがイベントが作成された後にupdate_user_pointsを実行すると思う、それは後に配置する必要がありますか?そして私は最初のやり方はうまくいくはずですが? あなたは初心者のためのrspecについて学ぶために良いものを私に導くことができます。 ありがとう:D –

関連する問題