2017-08-12 5 views
0

Je ne peux pas utiliser correctement le garçon d'usine.RecursionError: lors de l'utilisation d'un garçon d'usine

qui est mes usines:

import factory 

from harrispierce.models import Article, Journal, Section 

class JournalFactory(factory.Factory): 
    class Meta: 
     model = Journal 

    name = factory.sequence(lambda n: 'Journal%d'%n) 

    @factory.post_generation 
    def sections(self, create, extracted, **kwargs): 
     if not create: 
      # Simple build, do nothing. 
      return 

     if extracted: 
      # A list of groups were passed in, use them 
      for section in extracted: 
       self.sections.add(section) 


class SectionFactory(factory.Factory): 
    class Meta: 
     model = Section 

    name = factory.sequence(lambda n: 'Section%d'%n) 

et mon test:

import pytest 
from django.test import TestCase, client 
from harrispierce.factories import JournalFactory, SectionFactory 

@pytest.mark.django_db 
class TestIndex(TestCase): 

    @classmethod 
    def setUpTestData(cls): 
     cls.myclient = client.Client() 

    def test_index_view(self): 
     response = self.myclient.get('/') 
     assert response.status_code == 200 

    def test_index_content(self): 
     section0 = SectionFactory() 
     section1 = SectionFactory() 
     section2 = SectionFactory() 
     print('wijhdjk: ', section0) 
     journal1 = JournalFactory.create(sections=(section0, section1, section2)) 

     response = self.myclient.get('/') 

     print('wijhdjk: ', journal1) 
     self.assertEquals(journal1.name, 'Section0') 
     self.assertContains(response, journal1.name) 

Mais je reçois ce lors de l'exécution pytest:

journal1 = JournalFactory.create(sections=(section0, section1, section2))

harrispierce_tests/test_index.py:22:

RecursionError: maximum recursion depth exceeded while calling a Python object

!!! Récursivité détectée (mêmes positions locales & position)

Répondre

1

Un problème possible serait que vous n'utilisiez pas la classe de base Factory appropriée: pour un modèle Django, utilisez factory.django.DjangoModelFactory.

Cela ne devrait pas causer le problème que vous avez, cependant; une trace de pile complète serait utile. Essayez de supprimer la section @factory.post_generation et vérifiez si vous obtenez un objet Journal approprié; puis inspectez les paramètres où passé. Si cela ne suffit pas pour corriger votre code, je suggère d'ouvrir un problème sur le factory_boy repository, avec un cas de test reproductible (il y a déjà some branches/commits qui tente de reproduire un bug signalé, qui peut être utilisé comme modèle).