elixir - mac - phoenix framework tutorial
Probando una carga de archivos en phoenix/elixir (1)
Coloque un archivo en su directorio de prueba en algún lugar (tal vez test/fixtures
) luego use la estructura Plug.Upload :
upload = %Plug.Upload{path: "test/fixtures/example.png", filename: "example.png"}
conn() |> post("/api/v1/originals", %{ :image => upload })
Estoy tratando de probar el controlador que espera una carga de archivos usando el framework phoenix. Seguí la guía de las guías de phoenix ( http://www.phoenixframework.org/docs/file-uploads ) y funciona en el navegador, pero tengo problemas para escribir una prueba. Esto es lo que hice:
test "POST photo" do
{ :ok, raw_file } = File.read "1528_27.jpg"
conn() |> post("/api/v1/originals", %{ :image => raw_file })
# do some assertions
end
El problema es que, en el controlador, mi archivo nunca termina como una estructura %Plug.Upload
, sino como binario. Así que al probar, mis parámetros en el controlador parecen:
params: %{"image" => <<255, 216, 255, 225, 18, 180, 69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 10, 0, 15, 1, 2, 0, 26, 0, 0, 0, 134, 0, 0, 0, 16, 1, 2, 0, 10, 0, ...>>},
y mi controlador explota cuando intento acceder a params["image"].path
. Esto funciona cuando se carga desde el navegador, porque entonces, tengo la estructura de carga esperada en mis parámetros:
params: %{
"image" => %Plug.Upload{
content_type: "image/jpeg",
filename: "1528_27.jpg",
path: "/var/folders/98/40k7dt2d2sxf6xnkc_627lqc0000gp/T//plug-1448/multipart-280987-612081-2"
}
},
¿Cómo puedo post
un archivo desde una prueba, por lo que obtengo un %Plug.Upload
struct, y no solo binario?