を使用してDjango (1.9.6)
おりpytest (2.9.2)
、pytest-django (2.9.1)
次のようなデータ移行があります。
# -*- 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
これにより、移行が正常に実行されます。テストでは、必要な権限をユーザーに割り当てるフィクスチャがあります。ユーザーがグループに属しているかどうかではなく、すべてのコードがアクセス許可に対してチェックするため、すべてのテストに合格します。