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

时间:2019-07-12 12:27:21

标签: django django-views django-testing django-tests

这是我对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来确保正确的测试隔离,或者将“ default”添加到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')

]

2 个答案:

答案 0 :(得分:0)

在文档SimpleTestCase下的声明中,“如果您的测试进行任何数据库查询,请使用子类class User< ApplicationRecord devise :session_limitable (only if user.status == "mystatus") end TransactionTestCase。”

您得到的错误是告诉您您的视图正在尝试在TestCase的子类中执行数据库查询。您应该更改正在使用的SimpleTestCase类-这样可以解决错误。

答案 1 :(得分:0)

就像您继承TestCaseTransactionTestCase或通过以下方式使用相同的SimpleTestCase一样

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

较早的SimpleTestCase依赖于allow_database_queries = True自2.2版开始贬值的django

不推荐使用此属性,而推荐使用databases。可以通过设置allow_database_queries = True来实现databases = '__all__'的先前行为。

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