rspec насмешливый внешний API - PullRequest
4 голосов
/ 17 июля 2011

Новый для 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

, который генерирует ошибку: неопределенный метод `request 'для nil: NilClass

Правильный ли я подход? спасибо!

Ответы [ 3 ]

4 голосов
/ 25 июля 2011

Когда вы делаете следующее:

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

Вы вводите новое значение с 0 параметрами, но ваш тест:

Twilio::RestAccount.new(ACCOUNT_SID, ACCOUNT_TOKEN)

, новый с 2 ​​параметрами.

попробуйте:

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

и удалите:

Twilio::RestAccount.should_receive(:new)
4 голосов
/ 06 августа 2011

С Twilio и другими внешними сервисами я также рассматриваю возможность использования видеомагнитофона.http://relishapp.com/myronmarston/vcr

Достоинством является то, что вы работаете один раз с ручным тестированием, и это в основном подтверждает, что вы ничего не напутали.Недостатком является то, что каждый раз, когда вы касаетесь кода, проверенного видеомагнитофоном, вам часто приходится заново тестировать все, что проверяется видеомагнитофоном вручную.Что-то еще, чтобы рассмотреть.

4 голосов
/ 25 июля 2011

Выезд webmock .Это действительно то, что вы хотите использовать для чего-то подобного.

...