IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Tests de mes models Django inopérants


Sujet :

Django Python

  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut Tests de mes models Django inopérants
    Bonjour,

    j'ai un projet en Django consistant à utiliser certaines tables d'une base de données Sqlite externe.

    Pour réaliser les models dont j'ai besoin, j'ai lancé la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    python manage.py inspectdb
    .

    Pour des raisons d'ordre pratique, chaque model a été nommé différemment du nom de la table qu'il représente.

    Par exemple, j'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class Author(models.Model):
        '''Author model class.'''
     
        name: models.TextField = models.TextField(
            blank=True, null=True, db_column='sort'
        )
     
        class Meta:
            managed: bool = False
            db_table: str = 'authors'
    Django ne gère la base de données qu'en lecture seule car, je le répète , la base Sqlite est externe au projet Python/Django.

    J'ai voulu faire le test suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class TestModels:
        @pytest.mark.django_db
        def test_author(self) -> None:
            auth: Author = Author.objects.create(name='aaa')
            auth.save()
            assert auth.name == 'aaa'
    Le test ne passe pas au vert. Voici ce que Pytest me sort en retour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ---------------------------------------------------------------------- Captured stderr setup ----------------------------------------------------------------------- 
    Creating test database for alias 'default' ('file:memorydb_default?mode=memory&cache=shared')...
    ===================================================================== short test summary info ====================================================================== 
    FAILED xxx/tests/unit/test_models.py::TestModels::test_author - django.db.utils.OperationalError: no such table: authors
    La table authors existe pourtant. C'est vers elle que pointe mon model Author.

    Est-ce parce que la base de données est en lecture seule que le test de création d'un enregistrement dans la table authors ne peut être mené ?

    Ca me parait plus que plausible, sauf que le message d'erreur levé par l'exception django.db.utils.OperationalError parle de tout autre chose : no such table: authors

    Quelqu'un a-t-il une idée ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Quelqu'un sait-il sinon comment employer une base de données Sqlite3 pour mes tests ?

    L'idée ne serait plus de créer des enregistrements durant les tests, mais de contrôler des enregistrements déjà présents en base.

    Mais je ne vois pas comment gérer une bdd de tests.

    Je vais me pencher sur Monkeypatch pour voir si je peux mocker quelque chose mais toute aide serait la bienvenue.

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Citation Envoyé par Arioch Voir le message

    La table authors existe pourtant. C'est vers elle que pointe mon model Author.
    Pas sûr, la modification de modèle Django ou table d'une BDD se fait via la commande python manage.py makemigrations et l'application via la commande python manage.py migrateSans quoi tes modèles ne sont pas pris en compte dans la BDD. As-tu appliqué ces commandes ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Je n'ai pas appliqué ces méthodes puisque ma base doit rester en lecture seule.

    Elle est externe, hors architecture du programme. Elle ne sert qu'en consultation avec les méthodes objects.get ou objects.filter.

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    Tu parles de table, donc d'une écriture sur la BDD.

    Si tu utilises objects.create, tu indiques vouloir utiliser une table de la base, sauf que... elle n'existe pas comme tu ne veux pas y créer la table Author.

    Une des solutions serait de créer ton objet en instanciant simplement ta classe Author,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    author = Author(name="aaa")
    assert author.name == "aaa"
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Arioch Voir le message
    Elle est externe, hors architecture du programme. Elle ne sert qu'en consultation avec les méthodes objects.get ou objects.filter.
    Si les tables sont existantes, vos modèles peuvent être crées tels que décrits dans la documentation..

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Merci pour vos pistes

Discussions similaires

  1. [ZF 1.11] Impossible d'accéder à mes models
    Par akrogames dans le forum MVC
    Réponses: 2
    Dernier message: 30/12/2010, 14h13
  2. Réponses: 7
    Dernier message: 18/07/2008, 10h12
  3. Test inopérant
    Par shkyo dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/06/2008, 11h36
  4. Réponses: 3
    Dernier message: 06/06/2007, 17h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo