Ruby on rails RSpec allow_的任何_实例在请求测试中不起作用
我是RSpec的新手,正在测试一些请求类型的webhook测试。 但在这里,即使我使用Ruby on rails RSpec allow_的任何_实例在请求测试中不起作用,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我是RSpec的新手,正在测试一些请求类型的webhook测试。 但在这里,即使我使用允许任何实例,它也会出错得到500而不是200。我用binding.pry检查了每个变量,但看起来一切正常。 在我看来,模拟失败了,所以它返回500。 有什么想法吗 describe "stripe_invoice_created_webhook", type: :request do let(:card_invoice){ create(:card_invoice, id: invoice.id) }
允许任何实例,它也会出错得到500而不是200。我用binding.pry检查了每个变量,但看起来一切正常。
在我看来,模拟失败了,所以它返回500
。
有什么想法吗
describe "stripe_invoice_created_webhook", type: :request do
let(:card_invoice){ create(:card_invoice, id: invoice.id) }
let(:invoice){ create(:invoice, payment_account_id: payment_card_account.payment_account_id) }
let(:payment_card_account){ create(:payment_card_account,
stripe_customer_id: event.data.object.customer) }
let(:event){ StripeMock.mock_webhook_event('invoice.created', {
closed: false
}) }
it 'responds 200 to invoice_created webhook with valid endpoint' do
allow_any_instance_of(CardInvoice).to receive(:process_invoice_items)
allow_any_instance_of(CardInvoice).to receive(:process!)
post '/stripe-events', event.as_json
expect(response.status).to eq 200
expect{ card_invoice.process_invoice_items }.not_to raise_error
expect{ card_invoice.process! }.not_to raise_error
end
原始代码是
class InvoiceCreated
def call(event)
invoice = event.data.object
# NOTE: Skip if the invoice is closed.
if invoice.closed == false
stripe_customer = invoice.customer
payment_account = PaymentCardAccount.find_by(stripe_customer_id: stripe_customer)
card_invoice = Invoice.find_card_invoice_in_this_month_within(payment_account: payment_account)
card_invoice.process_invoice_items(stripe_customer: stripe_customer,
event_invoice_id: invoice.id)
card_invoice.process!(:pending, id: invoice.id)
end
end
end
是的,嘲笑失败了。您期望对象CardVoice接收进程!或处理发票项,但尚未指定返回值。allow_any_instance_的语法为
allow_any_instance_of(Object).to receive(:function).and_return(:return_value)
谢谢你的回答。但是,返回(true)不起作用。为什么呢?