Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在phoenix/elixir中测试文件上载_Elixir_Phoenix Framework - Fatal编程技术网

在phoenix/elixir中测试文件上载

在phoenix/elixir中测试文件上载,elixir,phoenix-framework,Elixir,Phoenix Framework,我正在尝试测试一个控制器,它期望使用phoenix框架上传文件。我在phoenix guides()上遵循了指南,它可以在浏览器中运行,但是我在为它编写测试时遇到了问题。以下是我所做的: test“POST photo”do {:好的,raw_file}=file.read“1528_27.jpg” conn()|>post(“/api/v1/originals”,%{:image=>raw_file}) #做一些断言 结束 问题是,在控制器中,我的文件永远不会变成%Plug.Uploadst

我正在尝试测试一个控制器,它期望使用phoenix框架上传文件。我在phoenix guides()上遵循了指南,它可以在浏览器中运行,但是我在为它编写测试时遇到了问题。以下是我所做的:

test“POST photo”do
{:好的,raw_file}=file.read“1528_27.jpg”
conn()|>post(“/api/v1/originals”,%{:image=>raw_file})
#做一些断言
结束
问题是,在控制器中,我的文件永远不会变成
%Plug.Upload
struct,而是二进制文件。因此,在测试时,控制器中的参数如下所示:

params:%{“image”=>},
当试图访问
params[“image”]时,我的控制器就会启动。path
。但是,从浏览器上载时,这是有效的,因为这样,我的参数中就有了预期的上载结构:

params:%{
“image”=>%Plug.Upload{
内容类型:“图像/jpeg”,
文件名:“1528_27.jpg”,
路径:“/var/folders/98/40k7dt2d2sxf6xnkc_627lqc0000gp/T//plug-1448/multipart-280987-612081-2”
}
},

我怎样才能
发布测试中的文件,从而获得
%的插件。上传
结构,而不仅仅是二进制文件?

将文件放在测试目录中的某个位置(可能
测试/夹具
),然后使用结构:


有没有办法不用从磁盘上的fixture文件中进行物理读取就可以进行测试?如果有的话,我更喜欢在内存中运行测试possible@Gazler如何测试多个上传
Plug.Upload
一次只支持一个文件time@Tanweer大概您会使用类似于
的东西。在这种情况下,您将在post中传递一个列表
post(“/api/v1/originals”,%%{:image=>[%Plug.Upload{},%Plug.Upload{}]})
注意,可能还需要在
%Plug.Upload
结构中指定
内容类型
字段,这通常存在于通过用户界面上传的文件中。我认为其中之一是问题中链接到的文档@screnig的当前位置:以防有人想在Phoenix中有一个简单的项目来上传文件
upload = %Plug.Upload{path: "test/fixtures/example.png", filename: "example.png"}
conn() |> post("/api/v1/originals", %{ :image => upload })