2013-08-20 21 views
13

Come posso stub un metodo all'interno di un modulo:Rspec - stub metodo di modulo

module SomeModule 
    def method_one 
     # do stuff 
     something = method_two(some_arg) 
     # so more stuff 
    end 

    def method_two(arg) 
     # do stuff 
    end 
end 

posso testare method_two in isolamento bene.

vorrei provare method_one in isolamento troppo dal spegnendo il valore di ritorno di method_two:

shared_examples_for SomeModule do 
    it 'does something exciting' do 
     # neither of the below work 
     # SomeModule.should_receive(:method_two).and_return('MANUAL') 
     # SomeModule.stub(:method_two).and_return('MANUAL') 

     # expect(described_class.new.method_one).to eq(some_value) 
    end 
end 

describe SomeController do 
    include_examples SomeModule 
end 

Le specifiche in SomeModule che sono inclusi nel SomeController fallire perché method_two genera un'eccezione (si cerca di fare un db ricerca che non è stata seminata).

Come posso eseguire lo stub method_two quando viene chiamato entro method_one?

+0

serio? perché downvote? – Harry

+0

cosa ti aspetti da questo modulo? essere un mixin o chiamare un metodo da esso a livello di classe come: 'SomeModule.foo'? – apneadiving

+2

Prendi coraggio, George. I downvotes sulle domande sono una cattiva idea, a mio parere, ma la buona notizia è che quelli inappropriati stimolano frequentemente gli upvotes compensativi, con un guadagno netto per te e nessun impatto sul voto netto. –

risposta

2
shared_examples_for SomeModule do 
    let(:instance) { described_class.new } 

    it 'does something exciting' do 
    instance.should_receive(:method_two).and_return('MANUAL') 
    expect(instance.method_one).to eq(some_value) 
    end 
end 

describe SomeController do 
    include_examples SomeModule 
end 
+15

Cerca di includere alcune spiegazioni su cosa sta succedendo e il tuo ragionamento dietro a questo. –

Problemi correlati