sqlmock ne correspond pas à la requête, malgré un texte identique
Message d'erreur :
could not match actual sql: "SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1" with expected regexp "SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1"
lors de l'utilisation de sqlmock avec Gorm peut être frustrant. Bien que la sortie du journal affiche des requêtes identiques, la correspondance échoue.
Le problème sous-jacent ici est la différence entre le texte SQL et la syntaxe SQL. Bien que le texte de la requête puisse sembler identique, de petites variations syntaxiques peuvent entraîner des problèmes. Pour résoudre ce problème, assurez-vous que la chaîne de requête attendue dans votre simulation correspond au texte littéral de la requête en cours d'exécution.
Une solution possible consiste à utiliser la fonction regexp.QuoteMeta() pour échapper aux métacaractères de la requête attendue. :
mock.ExpectQuery(regexp.QuoteMeta(`SELECT * FROM "storage_pools" WHERE "storage_pools"."deleted_at" IS NULL AND ((poolid = ?)) ORDER BY "storage_pools"."id" ASC LIMIT 1`))
En plaçant le texte de la requête entre guillemets littéraux, regexp.QuoteMeta() garantit que tous les caractères spéciaux ou métacaractères de la chaîne sont traités littéralement, les empêchant d'interférer avec le processus de correspondance. Cela devrait résoudre le problème et permettre à sqlmock de correspondre correctement à la requête.
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!