Ich bin neu bei Elixir und Phoenix und ich versuche, einen Web-Service zu meiner Website zu ergänzen. Zunächst möchte ich meine neue Datenstruktur testen, indem ich einige Daten aus einer JSON-Datei importiere. Ich dachte, ich würde das mit einem Test machen. Ich habe die grundlegenden Handbücher gelesen (einschließlich des Testabschnitts), aber ich konnte nichts finden, um einen API-Anruf zu testen.Testen einer API Anruf mit Elixir/Phoenix
Aus dem folgenden Code, erhalte ich die folgende Fehlermeldung, wenn ich mix test
laufen:
** (ArgumentError) flash not fetched, call fetch_flash/2
Diese auf der Linie versagt, die den Anruf und gibt die Verbindung macht. Ich nehme an, dass ich den falschen Anruf verwende/etwas verpasse? Gibt es Unterlagen, die ich vermisst habe, oder kann mir jemand ein gutes Beispiel geben?
Hier ist ein Ausschnitt aus meinem router.ex
:
scope "/", ContactsApp do
pipe_through :browser # Use the default browser stack
get "/", PageController, :index
resources "/contacts", ContactsController
end
# Other scopes may use custom stacks.
scope "/api", ContactsApp do
pipe_through :api
get "/import", ContactsController, :import
end
Für Vorerst alles, was ich getan habe, ist die ContactsController.Create
Methode kopieren und nannte es ContactsController.Import
. Ich kopierte auch die „Ressource erstellt und leitet, wenn die Daten gültig“ Test und verwenden :import
statt :create
Hier ist der vollständige Stack-Trace:
** (ArgumentError) flash not fetched, call fetch_flash/2
stacktrace:
(phoenix) lib/phoenix/controller.ex:997: Phoenix.Controller.get_flash/1
(phoenix) lib/phoenix/controller.ex:982: Phoenix.Controller.put_flash/3
(contacts_app) web/controllers/contacts_controller.ex:74: ContactsApp.LogController.stuff/2
(contacts_app) web/controllers/contacts_controller.ex:1: ContactsApp.LogController.action/2
(contacts_app) web/controllers/contacts_controller.ex:1: ContactsApp.LogController.phoenix_controller_pipeline/2
(contacts_app) lib/phoenix/router.ex:261: ContactsApp.Router.dispatch/2
(contacts_app) web/router.ex:1: ContactsApp.Router.do_call/2
(contacts_app) lib/contacts_app/endpoint.ex:1: ContactsApp.Endpoint.phoenix_pipeline/1
(contacts_app) lib/phoenix/endpoint/render_errors.ex:34: ContactsApp.Endpoint.call/2
(phoenix) lib/phoenix/test/conn_test.ex:194: Phoenix.ConnTest.dispatch/5
test/controllers/contacts_controller_test.exs:69
Nennen Sie 'get_flash' irgendwo in Ihrem Code oder Test? – Dogbert
Anscheinend 'conn = conn bekommen, contacts_path (conn,: importieren), log: @ valid_attrs' tut – Mitkins
Haben Sie den Befehl' mix phoenix.gen.json' versucht? Es wird Tests für Sie generieren. So können Sie sehen, wie es gemacht wird. – sobolevn