2017-10-30 7 views
0

Ich habe eine sehr einfache Application-Controller-Methode, die ich testen möchte. Es wird von anderen Application Controller-Methoden verwendet, um festzustellen, ob wir umleiten müssen. Es wird also keine render Funktionen machen.Mini-Test - Testen einer Anwendung Controller-Methode ohne Render

class ApplicationController < ActionController::Base 
    def has_consent 
    current_user ? current_user.consent : nil 
    end 
end 

Alle Beispiele für Mini-Test Verwendung #assert_response oder #assert_redirected_to. Wie bekomme ich Zugriff auf application_controller Methoden innerhalb des Mini-Test-Frameworks? IE, ich kann den Test schreiben, aber wie zum Teufel mache ich das?

Antwort

1

Die einfache Antwort ist nicht.

Die öffentliche API eines Controllers sind die Aktionen, die auf HTTP-Anforderungen reagieren, und Sie testen sie, indem Sie HTTP-Anforderungen senden und Assertionen über die zurückgegebene Antwort schreiben.

Wenn Ihre Methode nicht auf HTTP-Anforderungen reagiert, sollte es eine private Methode sein. Und Sie testen keine Privatpersonen.

Stattdessen sollten Sie testen, indem Sie testen, wie Ihre Anwendung reagiert, wenn der Benutzer keine Zustimmung erteilt hat. Nicht die Implementierungsdetails.

Wenn die isolierte Methode wirklich wichtig ist, gehört sie nicht in den Controller. Eher in der Modellschicht oder einem Helfer - der isoliert getestet werden kann.

+0

Es ist voll möglich, indem Sie eine Mock-Controller-Klasse erstellen und mit ApplicationController erweitern - aber es ist keine gute Idee. – max