Faire des tests avec Django

Et possiblement Travis

Le problème exposé dans ce sujet a été résolu.

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…

+0 -0

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.

+0 -0

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.

+0 -0

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!

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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