18

我正在尝试使用 Rspec 删除 Stripe API,但遇到了问题。这是我的代码的样子:

Stripe::Customer.should_receive(:create).with(any_args).and_raise(Stripe::CardError)

这是我得到的错误:

Failure/Error: Stripe::Customer.should_receive(:create).with(any_args).and_raise(Stripe::CardError)
ArgumentError:
  wrong number of arguments (0 for 3..6)
4

1 回答 1

22

Stripe::CardError 需要 3..6 个参数,根据以下源代码:

class CardError < StripeError
  ...
  def initialize(message, param, code, http_status=nil, http_body=nil, json_body=nil)

以下是 github 上 RSpec 文档的关键文档:

expect(double).to receive(:msg).and_raise(error)
  #error can be an instantiated object or a class
  #if it is a class, it must be instantiable with no args

由于您只是提供课程并且课程需要参数,因此它失败了。您需要实例化它(即通过new)并提供参数。

完整定义在https://github.com/stripe/stripe-ruby/blob/0c281891948a793e79cc997d31918ba7f987f7ae/lib/stripe/errors/card_error.rb

于 2013-06-25T17:32:42.743 回答