Comment spécifier les chemins d'accès aux modèles pour App Engine avec les tests unitaires Go
Lors de l'utilisation d'App Engine avec le package de modèles intégré de Go, les tests unitaires peut rencontrer des problèmes pour localiser les fichiers de modèle. En effet, lors du développement local, le serveur recherche les fichiers modèles par rapport à la racine de l'application, tandis que les tests unitaires s'exécutent dans un répertoire différent.
Le problème
Le le test unitaire panique avec le message suivant : "panic : open templates/index.html : aucun fichier ou répertoire de ce type." Cela indique que le serveur ne trouve pas le fichier modèle index.html.
Option 1 : Modifier le répertoire de travail
Une option consiste à modifier le répertoire de travail vers la racine de l'application. avant d'appeler le code qui utilise des chemins relatifs vers les modèles. Ceci peut être réalisé avec os.Chdir().
import "os" func init() { if err := os.Chdir("../.."); err != nil { panic(err) } }
Option 2 : Refactoriser le code
Une autre option consiste à refactoriser le code qui utilise des chemins relatifs pour accepter un chemin de base. Ce chemin de base peut être défini sur la racine de l'application pendant les tests, permettant aux chemins relatifs de fonctionner correctement.
func pageIndex(w http.ResponseWriter, r *http.Request, basePath string) { tpls := append([]string{basePath + "/templates/index.html"}, templates...) tpl := template.Must(template.ParseFiles(tpls...)) // ... }
Dans le test unitaire, le chemin de base peut être défini sur la racine de l'application, garantissant ainsi que le modèle les fichiers peuvent être localisés.
func TestPageIndex(t *testing.T) { inst, _ := aetest.NewInstance(nil) //ignoring the errors for brevity defer inst.Close() req, _ := inst.NewRequest("GET", "/", nil) resp := httptest.NewRecorder() pageIndex(resp, req, "../..") // Set base path to app root }
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!