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
Susan Sarandonoriginal
2024-12-03 19:43:09426parcourir

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)
    }
}

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())
}

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