Faire des tests avec Django

Et possiblement Travis

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je viens de commencer a faire des tests Django et plusieurs questions foisonne dans mon esprit. Alors si vous pouviez discutez de certaines, je vous en remercierai jamais assez!

Tout d'abord je vous explique un peu ce que j'ai fait pour le moment (après longue observation du github de ZdS):

  • J'ai construit des fichiers factories.py dans chacune de mes applications, me permettant de créer des instances pour mes tests
  • J'ai créé un dossier tests dans chacune de mes applications ou se trouve un fichier test_models.py

Les tests sont-ils toujours aussi long a lancer ?

Je ne sais pas pour vous, mais personnellement le temps de lancer la DB de test est juste horrible, je doit attendre environ 20 secondes entre deux lancement de tests super basique puisque j'apprends…

Comment faire pour que mes tests dans les dossiers tests se lancent a l'appel de python manage.py test ?

Car pour le moment je suis obliger de taper python manage.py test app/myApp/tests

Comment lancer mes tests depuis Travis ?

Cela est peut être lié a la question précédente mais je pense que ça vient plus de mon .travis.yml car jusque la, Travis ne me lance aucun tests et me dit que tout est OK pour les 0 tests lancer.. Mais je ne vois pas de test dans le fichier de travis du ZdS

Comment résoudre une erreur du type :

1
FactoryError: Cannot generate instances of abstract factory CompanyStatusFactory; Ensure |CompanyStatusFactory.Meta.model is set and CompanyStatusFactory.Meta.abstract is either not set or False.

Voici quelques morceau de mon code pour aider

Factories.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# coding: utf-8

import factory
from app.company.models import Company, CompanyStatus

class CompanyStatusFactory(factory.DjangoModelFactory):
    FACTORY_FOR = CompanyStatus

    status = factory.Sequence('Status No{0}'.format)

    @classmethod
    def _prepare(cls, create, **kwargs):
        status = super(CompanyStatusFactory, cls)._prepare(create, **kwargs)
        if create:
            status.save()
        return status

test_models.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from django.test import TestCase
from app.company.factories import CompanyStatusFactory, CompanyFactory
from app.mentor.factories import MentorFactory

class CompanyModelsTest(TestCase):

    def setUp(self):
        self.status1 = CompanyStatusFactory()
        self.company1 = CompanyFactory()

    def test_get_mentors_count(self):
        self.assertEqual(self.company1.mentors.count, self.company1.get_mentors_count)

Merci d'avance de m'aider. Parce que j'ai vraiment l'impression de stagner, pourtant je trouve plein de documentation…

Édité par Sanoc

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Auteur du sujet

Bon après plusieurs essai et attente de 30 secondes, j'ai trouver comment résoudre la question N°4 depuis la doc de factory-boy :

1
2
class Meta:
        model = CompanyStatus

à la place de :

1
FACTORY_FOR = CompanyStatus

Je ne sais pas pourquoi le ZdS utilie ce FACTORY_FOR, mais la méta marche bien chez moi, comme dans la documentation.

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0

Cette réponse a aidé l'auteur du sujet

Les tests sont-ils toujours aussi long a lancer ?

Je ne sais pas pour vous, mais personnellement le temps de lancer la DB de test est juste horrible, je doit attendre environ 20 secondes entre deux lancement de tests super basique puisque j'apprends…

C'est pourquoi je ne lance jamais tous les tests en local et que ZdS utilise Travis CI ! :D

Comment faire pour que mes tests dans les dossiers tests se lancent a l'appel de python manage.py test ?

Car pour le moment je suis obliger de taper python manage.py test app/myApp/tests

As-tu bien créé un __init__.py dans tes dossiers tests/ ?

Si ça ne change rien, tu peux essayer de mettre TEST_RUNNER = 'django.test.runner.DiscoverRunner' dans ton settings.py. ;)

Comment lancer mes tests depuis Travis ?

Cela est peut être lié a la question précédente mais je pense que ça vient plus de mon .travis.yml car jusque la, Travis ne me lance aucun tests et me dit que tout est OK pour les 0 tests lancer.. Mais je ne vois pas de test dans le fichier de travis du ZdS

Par la commande python manage.py test un fois que la question juste au dessus sera réglée.

Médicament flemmard aux pul(p)sions imprécises. “Don’t wait for the perfect moment. Take the moment and make it perfect.”

+0 -0
Auteur du sujet

As-tu bien créé un __init__.py dans tes dossiers tests/ ?

Situphen

Eh bien a vrai dire, non… Je sais je suis un très mauvais élève…

En tout cas merci de tes réponses. Facile mais efficace! Un joli tiercé gagnant!

J’adorerais changer le monde, mais ils ne veulent pas me fournir le code source…

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte