2016-04-12 14 views
1

Ich habe dies folgende Exception-HandlerWie eine Ausnahme in

def call(conn, opts) do 
    try do 
     super(conn, opts) 
    rescue 
     e in Ecto.CastError -> conn 
     |> put_status(:not_found) 
     |> render(ErrorView, "404.html") 

     e in ArgumentError -> conn 
     |> put_status(:not_found) 
     |> render(ErrorView, "404.html") 
    end 
    end 

Statt Ecto.CastError in meinem Controller machen erhöhen ein 400 ich es 404 erhöhen will zu erhöhen. Jedoch kann ich meine folgende Testbedingung nicht erfüllen

Da mein benutzerdefinierter Ausnahmehandler keine Ausnahme ausgelöst hat.

Die Frage ist, wie eine richtige Ausnahme in meinem eigenen benutzerdefinierten Ausnahmebehandler auslösen, um den Test zu erfüllen?

Antwort

1

I sind falschen Ansatz, anstatt

def call(conn, opts) do 
    try do 
     super(conn, opts) 
    rescue 
     e in Ecto.CastError -> conn 
     |> put_status(:not_found) 
     |> render(ErrorView, "404.html") 

     e in ArgumentError -> conn 
     |> put_status(:not_found) 
     |> render(ErrorView, "404.html") 
    end 
    end 

ich soll diesen Block in meinem Controller verwende

defimpl Plug.Exception, for: Ecto.CastError do 
    def status(_exception), do: 404 
    end 
1

Werfen Sie einen Blick auf dieser Seite auf, wie Fehler in Phoenix zu handhaben: http://www.phoenixframework.org/v1.1.4/docs/custom-errors

Sie können hier die Standardwerte außer Kraft zu setzen (definiert here), so dass Ecto.CastError Ergebnisse in einem 404.

+0

Danke, half mir auf der Suche nach, wo ich falsch mache. Obwohl, um meine Frage zu beantworten, ist dieser Hinweis nicht genug :) – ardhitama