2015-11-23 13 views
14

में फ़ाइल अपलोड करने का परीक्षण करना मैं नियंत्रक का परीक्षण करने की कोशिश कर रहा हूं जो फीनिक्स फ्रेमवर्क का उपयोग कर फ़ाइल अपलोड करने की अपेक्षा करता है। मैंने फीनिक्स गाइड (http://www.phoenixframework.org/docs/file-uploads) पर मार्गदर्शिका का पालन किया और यह ब्राउज़र में काम करता है, लेकिन मुझे इसके लिए एक परीक्षा लिखने में परेशानी हो रही है। यहाँ मैं क्या किया है:फीनिक्स/elixir

test "POST photo" do 
    { :ok, raw_file } = File.read "1528_27.jpg" 
    conn() |> post("/api/v1/originals", %{ :image => raw_file }) 
    # do some assertions 
end 

समस्या है, नियंत्रक में, मेरी फाइल कभी नहीं एक %Plug.Upload struct के रूप में समाप्त हो जाती है, लेकिन द्विआधारी के रूप में। तो जब परीक्षण, जैसे नियंत्रक नज़र में मेरे परम:

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, ...>>}, 

और मेरे नियंत्रक ऊपर चल रही है जब params["image"].path का उपयोग करने की कोशिश कर रहा। यह काम करता है जब हालांकि ब्राउज़र से अपलोड करने, फिर क्योंकि, मैं अपने परम में उम्मीद अपलोड struct है:

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" 
    } 
}, 

मैं post एक परीक्षण से एक फ़ाइल, तो मैं कैसे एक %Plug.Upload struct प्राप्त कर सकते हैं, और सिर्फ द्विआधारी नहीं ?

उत्तर

27

कहीं अपने परीक्षण निर्देशिका में एक फ़ाइल रखो (शायद test/fixtures) तो Plug.Upload struct का उपयोग करें:

upload = %Plug.Upload{path: "test/fixtures/example.png", filename: "example.png"} 
conn() |> post("/api/v1/originals", %{ :image => upload }) 
+1

कि मसा में नहीं बल्कि स्पष्ट लगता;) THX! – srecnig

+2

@srecnig समाधान स्पष्ट होने का शायद एक अच्छा संकेत है! – Gazler

+2

डिस्क पर एक स्थिरता फ़ाइल से भौतिक रूप से पढ़ने के बिना इसका परीक्षण करने का कोई तरीका है? यदि संभव हो तो मैं स्मृति में चलाने के लिए अपने परीक्षण पसंद करता हूं – pmarreck

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^