2015-06-17 13 views
5

Sto eseguendo alcuni test di integrazione delle strisce e vorrei eseguire il mopping di alcuni endpoint. Sto cercando di fare in questo modo:Metodo di stub in ActionDispatch :: IntegrationTest

Stripe::Charge.stubs(:retrieve).returns({:balance_transaction => 40}) 

ma sto ottenendo il seguente:

NoMethodError: undefined method `stubs' for Stripe::Charge:Class 

Qual è la sintassi corretta per lo sradicamento questo? Rails 4, Ruby 2.

Modifica: Ecco il mio metodo di prova completo. In sostanza, il mio webhook di payment_succected raggiunge stripe per recuperare un addebito ed è una transazione di saldo associata per registrare la commissione di transazione. Sto usando stripe_mock per prendere in giro gli eventi di webhook, ma preferisco estirpare il resto usando tecniche di stub standard. Si noti che anche quando lo cambio su "stub", si genera lo stesso errore sopra (con stub sostituito per gli stub).

require 'test_helper' 
require 'stripe_mock' 

class WebhooksTest < ActionDispatch::IntegrationTest 
    # called before every single test 
    def setup 
    StripeMock.start 
    end 

    # called after every single test 
    def teardown 
    StripeMock.stop 
    end 

    test 'invoice.payment_succeeded' do 
    Stripe::Charge.stubs(:retrieve).returns({:balance_transaction => 40}) 
    event = StripeMock.mock_webhook_event('invoice.payment_succeeded', { :customer => "stripe_customer1", :id => "abc123" }) 
    post '/stripe-events', id: event.id 
    assert_equal "200", response.code 
    assert_equal 1, StripeInvoicePayment.count 
    assert_equal 'abc123', event.data.object.id 
    end 
end 
+1

Quale struttura usi? Più esempio di codice forse? – Elyasin

+0

Aggiunto il test completo che sto cercando di eseguire – Msencenb

risposta

1

L'unica cosa che sembra non corretto per me qui è .stubs quando dovrebbe essere .stub.

+1

Grazie per la risposta, ho aggiunto il metodo di test completo alla domanda. Si noti che cambiandolo in .stub si ha ancora lo stesso errore lanciato. Parte del problema è che non voglio usare rspec, questo è un test di integrazione standard per le rotaie. – Msencenb

0

Poiché non si utilizza RSpec, è consigliabile installare mocha gem per ottenere una selezione completa di strumenti di simulazione e di stub. Ecco un rapido:

# Gemfile 
gem "mocha", :group => :test 

# test/test_helper.rb 
require "mocha/mini_test" 

Ora è possibile stub in questo modo:

Stripe::Charge.stubs(:retrieve => {:balance_transaction => 40}) 

Oppure, se si desidera verificare il metodo è stato effettivamente chiamato, è possibile impostare un'aspettativa invece:

Stripe::Charge.expects(:retrieve) 
    .with(:id => "abc123") 
    .returns({:balance_transaction => 40}) 
Problemi correlati