測試 Go Http.Request.FormFile
測試需要多部分錶單資料的端點需要上傳檔案。這可以透過使用 httptest 庫產生帶有表單檔案的 post 請求來實現。
我們可以利用 mime/multipart 套件來建立表單文件,而不是模擬完整的 FormFile 結構。 CreateFormFile 函數產生一個指定欄位名稱和檔案名稱的多部分欄位頭。
透過將 CreateFormFile 建立的 io.Writer 傳遞給 httptest.NewRequest,我們可以用表單檔案模擬 post 請求。
以下是如何實現的範例:
<code class="go">func TestUploadImage(t *testing.T) { // Set up an io.Pipe to avoid buffering pr, pw := io.Pipe() writer := multipart.NewWriter(pw) go func() { defer writer.Close() part, err := writer.CreateFormFile("fileupload", "someimg.png") if err != nil { t.Error(err) } img := createImage() err = png.Encode(part, img) if err != nil { t.Error(err) } }() request := httptest.NewRequest("POST", "/", pr) request.Header.Add("Content-Type", writer.FormDataContentType()) response := httptest.NewRecorder() handler := UploadFileHandler() handler.ServeHTTP(response, request) if response.Code != 200 { t.Errorf("Expected %s, received %d", 200, response.Code) } if _, err := os.Stat("./uploads/someimg.png"); os.IsNotExist(err) { t.Error("Expected file ./uploads/someimg.png' to exist") } }</code>
此函數使用影像包動態建立影像,並使用 png.Encode 將其直接寫入多部分 Writer。這模擬了圖像檔案的上傳,而不需要實際的檔案 I/O。
以上是如何在 Go Http.Request.FormFile 測試中模擬檔案上傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!