我在Django应用程序中发现了一个奇怪的错误。我可以在/people/<pk>
访问该视图。在测试中它工作得很好,但在生产中我偶然发现了一些错误(只有几个!)pk:Reverse for 'single-person' with arguments '('',)' not found. 1 pattern(s) tried: ['people/(\\d+)/?$']
。因为我无法用我的测试来捕获它,所以我想用数据库的当前状态创建另一个测试来进行调试。另外,为了防止这样的未来情况,我总是希望能够使用生产数据库的副本运行我的测试,以最大限度地减少实际数据出错的可能性。
我认为它会像
一样简单manage.py dumdata --output db-test.json
然后
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from django.test import Client
from people.models import Person
class TestPeopleWithMyData(StaticLiveServerTestCase):
fixtures = ['db-test.json']
def setUp(self):
self.client = Client()
self.client.force_login(user='test_user')
def test_person(self):
for person in Person.objects.all():
print('Testing %s: ' % person, end='')
r = self.client.get('/people/%d' % person.pk)
print(r)
...
但是这次尝试失败了:
======================================================================
ERROR: setUpClass (people.tests.test_my_data.TestPeopleWithMyData)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/username/Documents/python_projects/project/venv/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py", line 178, in __get__
rel_obj = getattr(instance, self.cache_name)
AttributeError: 'Person' object has no attribute '_added_by_cache'
(我的added_by
模型中有一个名为Person
的字段。)然后它继续说django.contrib.auth.models.DoesNotExist: Problem installing fixture '/Users/username/Documents/python_projects/project/db-test.json': User matching query does not exist.
因为我知道这个数据库工作得很好,所以对我来说不合适。所以在我开始调试这个问题之前,我想了解我所做的事情是否可能是根本错误的,我不应该像这样创建测试夹具。或者我错过了一些简单的错误?
答案 0 :(得分:0)
我认为在运行测试之前你需要做的事情
python manage.py makemigrations
python manage.py migrate
在你的夹具文件中你有&#39; _added_by_cache&#39;那不在你的模特中。