Ошибка Rspec: неверное количество аргументов

Я пытаюсь заглушить API-интерфейс Stripe, используя Rspec, и я столкнулся с проблемой. Вот как выглядит мой код:

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)

Ответ 1

Stripe:: CardError требует 3..6 аргументов в следующем исходном коде:

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

Здесь ключевая документация из документа RSpec в github:

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