Издеваться над внешним API - PullRequest
2 голосов
/ 04 августа 2010

Я новичок в тестировании стратегий и насмешек, и мне тяжело понять, как смоделировать вызов во внешнюю службу. Я уверен, что мне чего-то не хватает, я просто не знаю, что именно.

Я использую драгоценный камень Braintree, чтобы взимать плату за услуги подписки через шлюз Braintree, и я хотел высмеять метод создания клиента и метод создания подписки в методе создания моего UserController.

Метод Customer.create выглядит примерно так:

  result = Braintree::Customer.create(
    :first_name => @creditcard.first_name,
    :last_name => @creditcard.last_name,
    :email => @user.email
    :credit_card => {
      ...
      }
    }
  )

Возвращает объект результата Braintree :: Successful с атрибутами обработанного результата.

Я полагаю, мне нужно сделать что-то вроде:

Braintree::Customer.expects(:create).returns(...)

Но что происходит в области возвращения? Нужно ли создавать собственный макет Успешного объекта с атрибутами поддельного обработанного результата, или есть более простой способ сделать все это?

Спасибо за любую помощь, которую вы можете предоставить.

1 Ответ

2 голосов
/ 04 сентября 2010

Вы можете вернуть OpenStruct, как предложено в комментарии, или stub или mock, что ИМХО лучше и полезнее для тестов, потому что вы можете легко устанавливать ожидания, как это:

Braintree::Customer.expects(:create).returns(mock(:save => true))

Возвращенный макет будет ожидать сообщения save (что в данном случае может не иметь смысла, но должно дать вам представление).

...