我使用Django (1.9.6)
,pytest (2.9.2)
和pytest-django (2.9.1)
Django的pytest數據遷移
數據庫訪問我有一個數據遷移,看起來像這樣:
# -*- coding: utf-8 -*-
# Generated by Django 1.9.6 on 2016-06-07 09:56
from __future__ import unicode_literals
from django.db import migrations
def create_groups(apps, schema_editor):
Group = apps.get_model('auth', 'group')
Permission = apps.get_model('auth', 'permission')
group1 = Group.objects.create(name='grou1')
group1_permissions = Permission.objects.filter(codename__in=[
'add_app1_model',
'add_app2_model',
'custom_permission_app1_model'
])
group1.permissions.add(*list(group1_permissions))
group2 = Group.objects.create(name='group2')
group2_permissions = Permission.objects.get(
codename='custom_permission_app2_model'
)
group2.permissions.add(*list(group2_permissions))
class Migration(migrations.Migration):
dependencies = [
('app1', '0001'),
('app2', '0001')
]
operations = [
migrations.RunPython(create_groups)
]
當我執行py.test --create-db
所有的測試中標記用pytest.mark.django_db
正在籌集__fake__.DoesNotExist: Permission matching query does not exist.
中get
的遷移操作。
調試遷移我發現create
操作正常,但filter
操作總是返回空白,我的測試數據庫創建了組,但沒有權限與任何組關聯。
我不知道我是否做錯了什麼?我所做的臨時修復是將get
更改爲filter
,這使遷移正常執行。在測試中,我有一個固定裝置可以爲用戶分配所需的權限。因爲我所有的代碼都是根據權限進行檢查的,而不是如果用戶屬於一個組,我所有的測試都會通過。
在這個django問題跟蹤器討論中,如何解決這個問題有一些建議。 https://code.djangoproject.com/ticket/23422 –