2014-10-31 14 views
5

Come posso fare quanto segue senza usare any_instance da Mocha? Voglio solo testare un controller protetto come described here senza utilizzare Rspec.stub any_instance usando Minitest

class PortfoliosControllerTest < ActionController::TestCase 

    setup do 
    @portfolio = portfolios(:p2) 
    user = @portfolio.user 

    token = Doorkeeper::AccessToken.create!(application_id: 'minitest', 
              resource_owner_id: user.id) 
    PortfoliosController.any_instance.stubs(:doorkeeper_token).returns(token) 
    end 
end 
+1

Hai visto questa soluzione per lo sradicamento, senza le biblioteche? http://stackoverflow.com/a/10329105/356060 – TuteC

risposta

5

non hai bisogno di stub qualsiasi istanza di PortfoliosController, solo l'istanza che il test sta usando. Questo è disponibile nella variabile @controller, come spiegato nello ActionController::TestCase documentation.

class PortfoliosControllerTest < ActionController::TestCase 

    setup do 
    @portfolio = portfolios(:p2) 
    user = @portfolio.user 

    token = Doorkeeper::AccessToken.create!(application_id: 'minitest', 
              resource_owner_id: user.id) 
    @controller.stubs(:doorkeeper_token).returns(token) 
    end 
end 
+0

'NoMethodError: metodo' stubs 'non definito per # 'ora suppongo, ho solo bisogno del modo corretto di stubare con Minitest –

+0

Se hai richiesto Mocha allora ".stubs" sarà disponibile. Questo errore mi fa pensare che non hai caricato Mocha. – blowmage

+1

non richiede Mocha è parte della mia domanda. Come posso farlo usando solo Minitest? –

2

Si consiglia di verificare this gem. Ti permettono di fare qualcosa di simile ...

class PortfoliosControllerTest < ActionController::TestCase 
    def cool_test 
    PortfoliosController.stub_any_instance(:doorkeeper_token, token) do 
     # Assert whatever you were going to assert 
    end 
    end 
end 

tipo di bello non dover preoccuparsi di setup sia.

1

versione 'no Mocha' di risposta 'blowmage'

class PortfoliosControllerTest < ActionController::TestCase 

    setup do 
    @portfolio = portfolios(:p2) 
    user = @portfolio.user 

    token = Doorkeeper::AccessToken.create!(application_id: 'minitest', 
              resource_owner_id: user.id) 
    @controller.stub(:doorkeeper_token,token) do 
     #do your tests 
    end 
    end 
end 

vedere http://www.rubydoc.info/gems/minitest/4.2.0/Object:stub