Maison >développement back-end >Golang >Comment résoudre les erreurs « panique : ouvrez les modèles/index.html : aucun fichier ou répertoire de ce type » dans les tests unitaires Go App Engine ?

Comment résoudre les erreurs « panique : ouvrez les modèles/index.html : aucun fichier ou répertoire de ce type » dans les tests unitaires Go App Engine ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-04 07:24:15524parcourir

How to Solve

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn