为什么下面的测试中response.context None ?我检查了response.content,它是“”。如果我删除 assertIsNotNone 行,我会收到 TypeError: 'NoneType' object is not subscribable
def test_log_view_with_no_entries(self):
"""
If no logs are available, an appropriate message should be displayed.
"""
response = self.client.get(reverse('swpgr:logs'))
self.assertIsNotNone(response.context)
self.assertEqual(response.status_code, 200)
self.assertContains(response, "No logs are available.")
self.assertQuerysetEqual(response.context['log_list'], [])
def test_log_view_with_one_entry(self):
"""
Logs should be displayed it table.
"""
time = timezone.now()
t = LogEntry.objects.create(event_date=time, command_type="Test", command_source="Test Case",
username="user")
response = self.client.get(reverse('swpgr:logs'))
self.assertIsNotNone(response.context)
self.assertQuerysetEqual(
response.context['log_list'],
['<LogEntry: 1 Test user: user>']
)`
我遇到了这个问题,为了修复它,在设置函数中执行了以下操作:
from django.test.utils import setup_test_environment
setup_test_environment()
在我们的例子中,问题不在
setup_test_environment()
(因为pytest-django
确实会自动为我们调用),但是,正如@tobltobs在他/她的评论中提到的,它是缓存。
交换
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'test-cache',
}
}
与
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
}
}
为我们解决了所有问题。
setup_test_environment() 安装一个模板渲染器,它允许我们检查响应上的一些附加属性,例如 response.context,否则这些属性将不可用。请注意,此方法不会设置测试数据库,因此以下内容将针对现有数据库运行,并且输出可能会略有不同,具体取决于您已创建的问题。如果 settings.py 中的 TIME_ZONE 不正确,您可能会得到意外的结果。如果您不记得之前设置过,请在继续之前检查一下。
参考:https://docs.djangoproject.com/en/5.0/intro/tutorial05/#the-django-test-client