python - 如何为 Django 管理页面的功能编写测试?

标签 python django testing django-admin django-testing

免责声明:我是 Django 和测试的新手

我在 Django 管理中有一些模型,但我覆盖了特定模型的 save_model() 函数。我无法测试 Model.create() 因为管理 save_model() 覆盖没有被调用。测试此功能的正确方法是什么?任何示例代码将不胜感激 :) 这是我的代码:

模型.py

class Page(models.Model):
    title = models.CharField(max_length=100)
    content = models.CharField(max_length=50000)
    path = models.CharField(max_length=300, unique=True, 
        help_text='Leave this blank to automatically generate a path.', 
        blank=True
    )
    pub_date = models.DateTimeField('publication date', default=timezone.now)

    def __str__(self):
        return self.title

管理员.py

class NavigationInline(admin.StackedInline):
    model = Navigation

class PageForm(forms.ModelForm):
    content = forms.CharField(widget=TinyMCE(attrs={'cols': 120,     
        'rows': 20})
    )

    class Meta:
        fields = ('title', 'pub_date')
        model = Page


class PageAdmin(admin.ModelAdmin):
    fieldsets = [
        (None, {'fields': ['title', 'content', 'path']}),
        ('Scheduling', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    form = PageForm
    inlines = [NavigationInline]

def save_model(self, request, obj, form, change):
    obj.save()
    # All kinds of craziness to be tested!

最佳答案

最后我用的是django客户端。我最初没有这样做是因为我遇到了“管理表单数据丢失或被篡改”的错误,最后我检查了发布到表单的数据,意识到我没有发布所需的“总计” -FORMS 的值(value)观。添加这些后,客户端测试工作正常:

class ModelAdminTests(TestCase):
    def create_page(self, title, content, parent_page_id=''):
        self.client = Client()
        self.client.login(username='admin', password='Password123')
        self.client.post(
            '/admin/pages/page/add/',
            {
                'title': title,
                'content': content,
                'pub_date_0': '2017-01-01',
                'pub_date_1': '12:00:00',
                'navigation-0-title': 'Home',
                'navigation-0-weight': 0,
                'navigation-0-parent': parent_page_id,
                'navigation-TOTAL_FORMS': '1',
                'navigation-INITIAL_FORMS': '0',
                'navigation-MAX_NUM_FORMS': '1',
            },
            follow=True,
        )
        self.client.logout()

    def setUp(self):
        User.objects.create_superuser('admin', 'admin@example.com', 'Password123')

    def test_route_created_with_page(self):
        """
        When a page is created, a route should always be created also.
        """
        page_title = 'Test'
        page_content = 'This is the test page.'

        self.create_page(
            title=page_title,
            content=page_content,
        )
        route = Route.objects.filter(pk=1).exists()

        self.assertTrue(route)

关于python - 如何为 Django 管理页面的功能编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42116212/

相关文章:

javascript - Nightmare.js中的.type和.click选择器

java - 如何在 spring-boot 1.4.3 中覆盖 spring-boot 应用程序属性

python -/usr/local/bin/python3 : bad interpreter: No such file or directory for ubuntu 14. 04

python - 将列表分成随机大小的 block 的最佳方法?

python - 查看 Python (Django) 中的当前日志记录配置

django - 如何在Django Admin中覆盖外键选择字段的默认显示值?

testing - Grails 不能使用 Spock 框架?

python - 在 Python 中读取动画 PNG?

python - 无法运行 monkeyrunner 脚本 - java.lang.IllegalArgumentException : Bad level

python - 在 Django 模型中正确定义此数据关系