gpt4 book ai didi

ruby-on-rails - RSpec allow_any_instance_of 在请求测试中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 16:18:00 24 4
gpt4 key购买 nike

我是 RSpec 的新手,正在测试一些带有请求类型的 webhook 测试。但即使我在这里使用 allow_any_instance_of,它也会出错 got 500 instead of 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 接收进程!或 process_invoice_item 但您尚未指定返回值。 allow_any_instance_of 的语法是

allow_any_instance_of(Object).to receive(:function).and_return(:return_value)

关于ruby-on-rails - RSpec allow_any_instance_of 在请求测试中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39523735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com