2016-09-16 59 views
1

我是RSpec的新手,並且使用請求類型測試了一些webhook測試。 但在這裏,即使我使用allow_any_instance_of,它也會出錯got 500 instead of 200。我用binding.pry檢查了每個變量,但似乎一切正常。 在我看來,嘲諷失敗了,所以它返回500。 任何想法?RSpec allow_any_instance_of在請求測試中不起作用

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 

回答

0

呀嘲諷的失敗。您期待CardVoice對象接收過程!或process_invoice_item,但你沒有指定一個返回值。 allow_any_instance_of的語法是

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

感謝您的回答。但.and_return(true)不起作用。這是爲什麼? – Tosh