Maison > développement back-end > Golang > Comment résoudre les erreurs « aucun fichier ou répertoire de ce type » lors des tests unitaires de modèles App Engine avec des chemins personnalisés ?

Comment résoudre les erreurs « aucun fichier ou répertoire de ce type » lors des tests unitaires de modèles App Engine avec des chemins personnalisés ?

Susan Sarandon
Libérer: 2024-12-03 19:43:09
original
428 Les gens l'ont consulté

How to Resolve

Test des modèles App Engine avec des chemins personnalisés

Lorsque vous utilisez le package de modèles avec Go sur App Engine, vous pouvez rencontrer un problème de résolution de fichiers lors des tests unitaires. Le test unitaire échoue avec l'erreur "open templates/index.html: no such file or directory", indiquant que le serveur ne peut pas localiser le fichier modèle.

La solution à ce problème réside dans la compréhension de la différence entre les racine de l'application (où réside app.yaml) et le répertoire actuel lors de l'exécution de tests unitaires. Les tests unitaires sont généralement exécutés dans le dossier contenant le fichier *_test.go, qui n'est pas la racine de l'application. Les chemins de fichiers relatifs qui fonctionnent correctement lors de l'exécution normale de l'application ne seront pas résolus correctement lors de l'exécution des tests.

Pour résoudre ce problème, vous pouvez soit :

1. Remplacez le répertoire de travail par la racine de l'application :

Utilisez os.Chdir() pour accéder au répertoire racine de l'application dans votre fichier de test, qui se trouve généralement à 2 niveaux au-dessus de l'emplacement du fichier de test. Par exemple :

func init() {
    if err := os.Chdir("../.."); err != nil {
        panic(err)
    }
}
Copier après la connexion

Notez que cela doit être fait dans la fonction init() ou appelé explicitement dans la méthode de test.

2. Refactoriser le code :

Au lieu d'utiliser des chemins de fichiers relatifs, refactorisez le code pour transmettre la racine de l'application en tant que paramètre ou variable. Cela vous permet de spécifier le chemin de base pour la résolution relative des fichiers lors des tests unitaires indépendamment du répertoire actuel.

// Package scope variable for passing the app root
var appRoot string

func pageIndex(w http.ResponseWriter, r *http.Request) {
    tpls := append([]string{"templates/index.html"}, templates...)
    tpl := template.Must(template.ParseFiles(append([]string{appRoot}, tpls...)...))
    // ...
}

// Function to initialize the app root before running tests
func TestMain(m *testing.M) {
    // Set appRoot to the absolute path of the app root
    appRoot = "../.."
    // ...
    os.Exit(m.Run())
}
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