Test des téléchargements de fichiers dans Go
Lors du test des points de terminaison qui gèrent les téléchargements de fichiers, il est nécessaire de définir le champ Request.FormFile. Malheureusement, se moquer simplement de la structure FormFile complète est une approche trop complexe. Au lieu de cela, il est possible d'exploiter le package mime/multipart pour créer l'instance FormFile nécessaire.
Utilisation de CreateFormFile
La fonction CreateFormFile, membre du type Writer, fournit un moyen pratique de générer un en-tête de données de formulaire avec un nom de champ et un nom de fichier spécifiques. Le io.Writer résultant peut ensuite être transmis à la fonction httptest.NewRequest.
Exemple d'utilisation de Pipes
Une approche consiste à écrire le FormFile dans un tampon io.ReaderWriter ou utilisez un io.Pipe. L'exemple suivant illustre cette dernière méthode :
<code class="go">// Create a pipe to prevent buffering. pr, pw := io.Pipe() // Transform data to multipart form data and write it to the pipe. writer := multipart.NewWriter(pw) defer writer.Close() go func() { // Create the "fileupload" form data field. part, err := writer.CreateFormFile("fileupload", "someimg.png") if err != nil { t.Error(err) } // Generate the image bytes. img := createImage() // Encode the image to the form data field writer. err = png.Encode(part, img) if err != nil { t.Error(err) } } // Read from the pipe into a new httptest.Request. request := httptest.NewRequest("POST", "/", pr) request.Header.Add("Content-Type", writer.FormDataContentType())</code>
Gestion de la requête
Avec les données FormFile dans la requête, vous pouvez les gérer dans le point de terminaison testé comme d'habitude . L'exemple de fonction montre la création d'un fichier dans le répertoire uploads.
Notes supplémentaires
Cette approche vous permet de créer des données de formulaire à la volée, en les transmettant au cadre de test sans avoir besoin de travailler avec des fichiers temporaires. Vous pouvez de la même manière utiliser encoding/csv pour générer des fichiers CSV sans avoir besoin de lire à partir du système de fichiers.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!