2 つの「サブスクライバー」インスタンスでの呼び出しを想定するテストをセットアップしています。
it "sends out sms to all the subscribers" do
@user.subscribers.create!
@user.subscribers.create!
Subscriber.any_instance.should_receive(:send_message).with(@message).times(2)
post :create, {:broadcast => valid_attributes}
end
実際のコードは次のとおりです。
def create
@broadcast = Broadcast.new(params[:broadcast])
current_user.subscribers.each do |subscriber|
subscriber.send_message(@broadcast.message)
end
...
エラー:
Failure/Error: post :create, {:broadcast => valid_attributes}
ArgumentError:
wrong number of arguments (1 for 0)
# ./app/controllers/broadcasts_controller.rb:41:in `block in create'
# ./app/controllers/broadcasts_controller.rb:40:in `create'
# ./spec/controllers/broadcasts_controller_spec.rb:73:in `block (4 levels) in <top (required)>'
何らかの理由で、行を追加すると: Subscriber.any_instance.should_receive(:send_message).with(@message).times(2)
、そのエラーメッセージで失敗します。その行を削除すると、テストはスムーズに実行されます (引数の数が間違っている問題はありません)。私は何を間違っていますか?