Django测试通过for循环解析
我在Django做一些测试。我使用fixture预加载一些数据并测试API POST。在我的帖子中,我想通过外键链接一些数据。测试行为很奇怪。我需要放置一个for循环以使其成功 以下是我的固定装置示例:Django测试通过for循环解析,django,unit-testing,django-rest-framework,django-testing,django-fixtures,Django,Unit Testing,Django Rest Framework,Django Testing,Django Fixtures,我在Django做一些测试。我使用fixture预加载一些数据并测试API POST。在我的帖子中,我想通过外键链接一些数据。测试行为很奇怪。我需要放置一个for循环以使其成功 以下是我的固定装置示例: [ { "model": "apps.track", "pk": 1, "fields": { "name": "Love Song # 1", "album": null } }, { "model": "apps.t
[
{
"model": "apps.track",
"pk": 1,
"fields": {
"name": "Love Song # 1",
"album": null
}
},
{
"model": "apps.track",
"pk": 2,
"fields": {
"name": "Love Song # 2",
"album": null
}
}
]
这是我的测试:
class TestPost(TestCase):
fixtures = ['fixtures/sample']
def setUp(self):
self.album = {
'name': 'Love Songs Album',
'tracks': [
{'id': 1},
{'id': 2}
]
}
def test_post(self):
c = Client()
response = c.post(
'/admin/login/', {'username': 'admin', 'password': 'passwordpassword'})
response = c.post('/apps/albums/',
data=json.dumps(self.album),
content_type='application/json')
album = Album.objects.latest('id')
tracks = Track.objects.filter(album=album).all()
self.assertEqual(tracks[0].id, 1)
self.assertEqual(tracks[1].id, 2)
测试失败,仅找到磁道id=2
,而未找到磁道id=1
。但是,当我在测试断言之前添加一个for循环
时,测试成功了
这是循环的魔力:
for track in tracks:
print("TRACK", track.id)
我想知道这背后是否有任何原因。您的设备没有包含任何相册型号的数据?你能分享你得到的错误吗?相册不重要吗?我正在创建它,并从中关联轨迹。错误是self.assertEqual(磁道[0].id,1)
断言错误2!=1
尝试将.order\u by('id')
添加到您的曲目查询中?哇,成功了!谢谢@IainShelvington。然而,我仍然很好奇for loop
如何神奇地首先解决我的问题。