2011-04-03 1 views

risposta

14

Se non mi sbaglio, Alliance.stub(:save) influirebbe sulle chiamate a Alliance.save. Vuoi @alliance.stub(:save).and_return(true).

Mocha ha un metodo utile any_instance, così si potrebbe fare qualcosa di simile Alliance.any_instance.stubs(:save).returns(true), che (come dice il nome) stub il metodo save per qualsiasi istanza di Alliance.

+0

hmm, Io in realtà penso che sia lo stesso dal salvataggio è un metodo di istanza. In ogni caso, non posso davvero accedere a @alliance, perché è come "@alliance = Alliance.new (params [: alliance])" in un metodo di creazione standard. Voglio solo bypassare le convalide di salvataggio perché non riesco a passare le variabili post attraverso ": post: create,: name => 'whatever'" – Spyros

+0

Menzionando che si desidera eseguire il stub del metodo su una variabile di istanza creata in un controller potrebbe aiutarti a ottenere risposte più accurate. ;) –

+0

Ma lo dico :) – Spyros

4

Probabilmente stai cercando qualcosa di simile:

describe AllianceController do 
    let(:alliance) { mock_model(Alliance) } 

    describe "#<controller action>" do 
    before do 
     Alliance.stub :new => alliance 
    end 

    context "valid alliance" do 
     before do 
     alliance.stub :save => true 
     end 

     it "should ..." do 

     end 
    end 
    end 
end 

Il contesto interno permette di lavorare con una finta alleanza che ha il metodo save spense a restituire true.

+0

+1 Dopo aver ricevuto maggiori dettagli da SpyrosP nei commenti, penso che questo sia probabilmente il miglior metodo per testare un controller (anche se hanno i loro parametri per funzionare). –

6

Utilizzando la nuova sintassi RSpec:

allow_any_instance_of(Alliance).to receive(:save).and_return(true)