2014-10-31 16 views
5

Wie kann ich Folgendes tun, ohne irgendeine von Mocha zu verwenden? Ich möchte nur einen geschützten Controller als described here ohne Rspec testen.Stub any_instance mit 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

Sie diese Lösung gesehen haben ohne Bibliotheken für Anstoßen? http://StackOverflow.com/a/10329105/356060 – TuteC

Antwort

5

Sie brauchen keine Instanz von PortfoliosController Stub, nur die Instanz, dass der Test verwendet. Dies ist in der Variablen @controller verfügbar, wie in der ActionController::TestCase documentation erläutert.

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: undefined Methode' Stubs 'für # 'jetzt schätze ich, ich brauche nur die richtige Art, mit Minitest –

+0

stub Wenn Sie Mocha benötigt haben dann wird '.stubs 'verfügbar sein. Dieser Fehler lässt mich denken, dass Sie Mocha nicht geladen haben. – blowmage

+1

erfordert nicht Mocha ist ein Teil meiner Frage. Wie kann ich es nur mit Minitest machen? –

2

Ich würde empfehlen, auschecken this gem. Sie erlauben würde, so etwas wie ...

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 

irgendwie schön zu tun, nicht über setup entweder kümmern.

1

Version 'no Mokka' von 'blowmage' Antwort

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 

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