4

这里是 TDD 的新手,哦!

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

 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 的未定义方法“请求”

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

4

3 回答 3

4

当你这样做时,你正在使用 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)
于 2011-07-25T01:16:04.483 回答
4

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

于 2011-07-25T00:41:59.757 回答
4

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

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

于 2011-08-06T01:34:00.493 回答