我已经为我正在做的Django项目写了测试,但是有一个特定的fixture无法加载。这个fixture是使用dumpdata生成的,我根本没有摆弄过它。我可以使用manage.py在那个fixture上加载数据,没有错误。我已经验证了数据实际上是使用shell和查询数据加载的。这让我抓狂,任何帮助都将非常感谢。
以下是我的测试文件(删除了不相关的部分):
class ViewsFromUrls(TestCase):
fixtures = [
'centers/fixtures/test_data.json',
'intranet/fixtures/test_data.json',
'training/fixtures/test_data.json', #The one that fails to load
]
def setUp(self):
self.c = Client()
self.c.login(username='USER', password='PASS')
...
def test_ViewBatch(self):
b = Batch.objects.all()[0].ticket_number
response = self.c.get(reverse('training.views.view_batch', kwargs={'id':b}))
self.assertTrue(response.status_code, 200)
...
6条答案
按热度按时间rta7y2nd1#
从
django.test
导入测试用例:import unittest
import django.utils.unittest
import django.test
这是一个沮丧的一天。停止抱怨-它在文件中:-/
nszi6y052#
我不知道这是否解决了您的问题,但在这个网站上:
https://code.djangoproject.com/wiki/Fixtures
我发现了一句有趣的话:
你会看到Django搜索 appnames/fixture and settings.FIXTURE_DIRS并加载第一个匹配的fixture.所以如果你使用testdata.json这样的fixture名称,你必须确保没有其他活动的应用程序使用相同名称的fixture.否则,你永远无法确定你实际加载的是什么fixture.因此建议你在fixture前面加上应用程序名称,例如,我的应用程序/夹具/我的应用程序_测试数据. json。
应用这个(在文件名中用appname作为前缀重命名fixture),解决了我的问题(我遇到了这里描述的相同问题)
2eafrhcq3#
检查夹具是否真的在正确的位置。来自文档:
Django将在三个位置搜索固定装置:
1.在每个已安装应用程序的fixtures目录中
1.在FIXTURE_DIRS设置中指定的任何目录中
1.在fixture命名的文本路径中
r6vfmomb4#
One thing to note, when creating the FIXTURE_DIRS constant in your settings file, be sure to leave out the leading '/' if you have a general fixtures directory off of the root of your project.
Ex:
'/actual/path/to/my/app/fixtures/'
Now, in the settings.py file:
Will NOT work:
FIXTURE_DIRS = '/fixtures/'
Will work:
FIXTURE_DIRS = 'fixtures/'
It's possible this depends on how your other routes are configured, but it was a gotcha that had me scratching my head for a little while. Hope this is useful. Cheers.
wwtsj6pe5#
我犯的一个简单错误是添加了一个自定义的
setUpClass()
,但忘记了包含super().setUpClass()
(当然,这也是Django加载fixture的逻辑所在)zbwhf8kr6#
对我来说:必需的TestCase而不是SimpleTestCase!导入pdb后仍然看不到postgres中的数据;pdb.set_trace(),但数据在那里,正如我的API调用测试所报告的那样。