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
Libérer: 2024-12-04 07:24:15
original
517 Les gens l'ont consulté

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)
    }
}
Copier après la connexion

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...))
    // ...
}
Copier après la connexion

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal