Rspec - 测试方法在另一个方法

时间:2016-03-01 02:19:10

标签: ruby-on-rails ruby rspec

在我的Rails应用程序中,我正在测试一个发送SMS消息的实例方法。它看起来像这样:

group.rb

def send_notifications
  twilio_sms = Twilio::REST::Client.new('mykey', 'mykey')
  begin
    twilio_sms.account.messages.create(
          from: "+188888888",
          to: "+1#{phone_number}",
          body: "Message from Company: New item uploaded to group"
    )
  rescue
    puts 'Invalid number'
  end
end

我无法弄清楚如何测试twilio_sms.account.messages.create部分。

到目前为止,我的规范看起来像这样:

group_spec.rb

describe Group do
  context 'instance methods' do
    describe '.send_notifictions' do
      it 'calls the create method on the twilio messages object' do
        twilio_messages = instance_double("Twilio::REST::Messages")
        expect(twilio_messages).to receive(:create)

        group = create(:group_with_notifications)
        group.send_notifications 
      end
    end
  end
end

这显然不起作用,否则我不会问这个问题。测试创建消息是否正确发送的正确方法是什么?或者我是以错误的方式接近这个?任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个

describe Group do
  describe 'instance methods' do

    describe '.send_notifictions' do
      it 'creates a new message' do
        twilio_sms = double(:twilio_sms)
        twilio_messages = double(:twilio_messages)
        expect(Twilio::REST::Client).to receive(:new).with('mykey', 'mykey').and_return(twilio_sms)
        expect(twilio_sms).to receive(:account).and_return(twilio_messages)
        expect(twilio_messages).to receive(:messages).and_return(twilio_messages)
        expect(twilio_messages).to receive(:create).with({:from => "+188888888", :to => "+15555555", :body => "Message from Company: New item uploaded to group"}).and_return(true)
        group = Group.create(some_attributes: 'foo')
        group.send_notifications
      end
    end

  end
end