rspec 模拟外部 api

Pet*_*ich 5 testing rspec mocking twilio

TDD 新手,天啊!

简而言之,这是我想要测试的内容(ruby​​ 库):

 account = Twilio::RestAccount.new(ACCOUNT_SID, ACCOUNT_TOKEN)
    resp = account.request(
        "/#{API_VERSION}/Accounts/#{ACCOUNT_SID}/SMS/Messages",
        'POST',
        smsInfo
    )
Run Code Online (Sandbox Code Playgroud)

这是测试代码尝试:

describe Text do
  it "should call the Twilio API with credentials" do
    #pending "mocking api although not passed in.."
    t = mock(Twilio::RestAccount)
    twapi = mock("new twapi").should_receive(:request).and_return(Net::HTTPSuccess)
    t.stub(:new).and_return(twapi)

    Twilio::RestAccount.should_receive(:new)

    sms = Factory.create(:boring_sms)
    sms.send_sms
  end
end
Run Code Online (Sandbox Code Playgroud)

生成错误: undefined method `request' for nil:NilClass

我采取的方法正确吗?谢谢!

Joh*_*gan 4

对于 Twilio 和其他外部服务,我还考虑使用 VCR。 http://relishapp.com/myronmarston/vcr

好处是,您可以通过手动测试让它工作一次,并且它基本上可以验证您不会搞砸任何事情。缺点是,每当您接触 VCR 测试的代码时,您通常都必须手动重新测试 VCR 测试的所有内容。还有其他需要考虑的事情。