2011-04-03 13 views
6

Esto debe ser simple, pero no puedo conseguir que funcione. Quiero resguardar un:Trozo Modelo método Guardar en Rspec/rieles

@alliance.save 

para que vuelva verdadero. Intenté:

Alliance.stub(:save).and_return(true) 

pero no funcionará. Algunas ideas ?

Respuesta

14

Si no me equivoco, Alliance.stub(:save) afectaría llamadas a Alliance.save. Quiere @alliance.stub(:save).and_return(true).

Mocha tiene un método útil any_instance, por lo que podría hacer algo como Alliance.any_instance.stubs(:save).returns(true), que (como su nombre indica) stub del método save para cualquier instancia de Alliance.

+0

hmm, de hecho creo que es el mismo desde que guardar es un método de instancia. En cualquier caso, realmente no puedo acceder @alliance, porque es como "@alliance = Alliance.new (params [: alianza])" en un estándar de crear método. Sólo quiero pasar por alto el salve validaciones porque me parece que no puede ser capaz de pasar variables a través de correos ": mensaje: crear,: name => 'lo que sea'" – Spyros

+0

mencionar que desea código auxiliar del método en una variable de instancia creada en un controlador puede ayudarlo a obtener respuestas más precisas. ;). –

+0

Pero he dicho que :) – Spyros

4

Probablemente usted está buscando algo como:

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 

El contexto interno le permite trabajar con un simulacro de Alianza que tiene el método save apagó para volver realidad.

+0

+1 Después de obtener más detalles de SpyrosP en los comentarios, creo que este es probablemente el mejor método para probar un controlador (incluso si consiguieron que sus params funcionaran). –

6

Usando la nueva sintaxis RSpec:

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