【问题标题】:rspec mocking external apirspec 模拟外部 api
【发布时间】:2011-07-17 18:56:58
【问题描述】:

这里是 TDD 新手,哦!

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

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

这里是测试代码尝试:

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

产生错误:nil:NilClass 的未定义方法 `request'

我是否采取了正确的方法?谢谢!

【问题讨论】:

    标签: testing rspec mocking twilio


    【解决方案1】:

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

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

    【讨论】:

    • 自从问了这个问题,我就成了VCR的忠实粉丝!
    【解决方案2】:

    当你这样做时,你正在使用 0 个参数存根 new:

    t.stub(:new).and_return(twapi)
    

    但你的测试是:

    Twilio::RestAccount.new(ACCOUNT_SID, ACCOUNT_TOKEN)
    

    这是新的,有 2 个参数。

    尝试:

    t.should_receive(:new).once.with(any_args()).and_return(twapi)
    

    并删除:

    Twilio::RestAccount.should_receive(:new)
    

    【讨论】:

      【解决方案3】:

      查看webmock。这真的是你想要用于这样的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-11
        • 1970-01-01
        • 2015-04-26
        • 2015-03-20
        • 1970-01-01
        • 1970-01-01
        • 2022-10-24
        • 1970-01-01
        相关资源
        最近更新 更多