2

我是测试策略和模拟的新手,我很难弄清楚如何模拟对外部服务的调用。我确定这很容易我错过了,我只是不知道到底是什么。

我正在使用 Braintree gem 通过 Braintree 网关对订阅服务收费,我想在我的 UserController 的 create 方法中模拟 Customer create 方法和 Subscription create 方法。

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(...)

但是退货区会发生什么?我是否需要使用伪造的处理结果的属性创建自己的模拟成功对象,还是有更简单的方法来完成所有这些?

感谢您的任何帮助,您可以提供。

4

1 回答 1

2

您可以按照评论中的建议返回 anOpenStruct或 a stubor mock,恕我直言,这对测试更好,更有用,因为您可以轻松设置期望,如下所示:

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

返回的模拟将期待save消息(在这种情况下可能没有意义,但应该给你的想法)。

于 2010-09-04T19:45:28.177 回答