0

我不能正确使用工厂男孩。

那是我的工厂:

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)

和我的测试:

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)

但是我在运行 pytest 时得到了这个:

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

harrispierce_tests/test_index.py:22:

RecursionError:调用 Python 对象时超出最大递归深度

!!!检测到递归(相同的本地人和位置)

4

1 回答 1

1

一个可能的问题是您没有使用正确的Factory基类:对于 Django 模型,使用factory.django.DjangoModelFactory.

不过,这不应该导致您遇到的问题;完整的堆栈跟踪将很有用。

尝试删除该@factory.post_generation部分,看看是否得到了正确的Journal对象;然后检查传递了哪些参数。

如果这不足以修复您的代码,我建议在factory_boy存储库上打开一个问题,并使用可重现的测试用例(已经有一些分支/提交试图重现报告的错误,可以用作模板)。

于 2017-08-14T13:46:09.863 回答