测试 Django 视图时出现断言错误

问题描述 投票:0回答:3

这是我对views.py 的测试函数,我在下面提到过:

def test_operation_page(self):
    url = reverse('operation')
    response = self.client.get(url)
    self.assertEqual(response.status_code, 200)
    self.assertTemplateUsed(response, 'abc.html')
    self.assertContains(response, '<b>BOOK id having certain title:</b>')

这是我在测试我的观点时遇到的错误

AssertionError:SimpleTestCase 子类中不允许对“默认”进行数据库查询。子类化 TestCase 或 TransactionTestCase 以确保正确的测试隔离,或将“默认”添加到 home.tests.TestViews.databases 以消除此故障。

这是我的观点.py

def operation(request):
    queryset=Mytable.objects.filter(title="The Diary of Virginia Woolf  Volume Five: 1936-1941").values('bookid')
    textset=list(Mytable.objects.order_by('-bookid').values('title'))
    context={

    'key1' : queryset, 
    'key2' : textset
    }
    return render(request,'abc.html',context)

这是我的urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('',v.index,name='index'),
path('abc/',v.operation,name='operation')
]
django django-views django-testing django-tests
3个回答
12
投票

这就像您继承

TestCase
TransactionTestCase
或通过以下方式使用相同的
SimpleTestCase

class CustomClass(django.test.SimpleTestCase):
    databases = '__all__'
    ...

早期

SimpleTestCase
依赖于
allow_database_queries = True
,自
django
版本 2.2 起已贬值。

此属性已弃用,取而代之的是

databases
。之前的
allow_database_queries = True
行为可以通过设置
databases = '__all__'
来实现。

https://docs.djangoproject.com/en/2.2/topics/testing/tools/#django.test.SimpleTestCase.databases


8
投票

正如 SimpleTestCase 下的文档中所述,“如果您的测试进行任何数据库查询,请使用子类

TransactionTestCase
TestCase
。”

您收到的错误告诉您,您的视图正在尝试在

SimpleTestCase
的子类中执行数据库查询。您应该更改您正在使用的
TestCase
类 - 这应该可以解决错误。


0
投票
class HomepageTests(SimpleTestCase):

上述子类(SimpleTestCase)随父类(TestCase)变化

class HomepageTests(TestCase):

使用它 在此输入图片描述

© www.soinside.com 2019 - 2024. All rights reserved.