Django FactoryBoy Test为复杂的单元测试创​​建嵌套对象

时间:2019-07-13 07:30:02

标签: django django-rest-framework python-unittest django-testing django-tests

我在编写测试用例时遇到了麻烦...

注意:我只创建一个帖子,我的测试就很好用。

现在我想创建一个嵌套帖子:

这是我当前正在尝试但未成功的代码段: 一开始看到它,后来我解释了这个问题

from django.test import TestCase
from django.urls import reverse

from .. tests import CategoryFactory, ArticleFactory, AuthorFactory

class TestSingleArticle(TestCase):
    def setUp(self):
        self.author = AuthorFactory()

        #create category
        self.category = CategoryFactory.create_batch(
            4,
            name='my category'
        )

        # create article
        self.article = ArticleFactory.create_batch(
            4,
            category=self.category,
            author=self.author
        )

        # Set the url
        self.url = reverse('article-single', args=[self.article.alias])

    #######################
        # Test Get Method
    #######################
    def test_single_article_get(self):
        request = self.client.get(self.url)
        self.assertEqual('my category', request.data['category'])

请仔细阅读以下内容: Author将是一个,我想创建4个Category并使用这4个类别创建4个Article ...,在每个category中,将是一个{{1} },共4个类别。我尝试了很多,但未能创建出这样的东西...

有人说我可以通过for循环来实现它,但是我做不到。

我也想将每个文章别名传递给article以便在我的api端点中请求...

如果您没有获得上述代码,则可以查看我的模型:

self.url

并且知道我正确实现了from django.db import models from django.contrib.auth.models import User import uuid class Author(models.Model): name = models.ForeignKey(User, on_delete=models.CASCADE) detail = models.TextField() def __str__(self): return self.name.username class Category(models.Model): name = models.CharField(max_length=100) def __str__(self): return self.name class Article(models.Model): alias = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) author = models.ForeignKey(Author, on_delete=models.CASCADE, related_name='author') title = models.CharField(max_length=200) body = models.TextField() category = models.ForeignKey(Category, on_delete=models.CASCADE) ...没问题。.只有创建具有多个类别的多个文章...

如果您需要其他任何信息,请告诉我...

最近几天我尝试了这个问题,但是我不能

谢谢

0 个答案:

没有答案