gpt4 book ai didi

django - 仅在第一次测试时执行数据迁移

转载 作者:行者123 更新时间:2023-12-04 09:37:52 26 4
gpt4 key购买 nike

我有一个简单的数据迁移,它创建了一个 Group ,它看起来像这样:

def make_manager_group(apps, schema_editor):
Group = apps.get_model("auth", "Group")
managers_group = Group(name="managers")
managers_group.save()

class Migration(migrations.Migration):

dependencies = [
('my_app', '0001_initial'),
('auth', '0006_require_contenttypes_0002'),
]

operations = [
migrations.RunPython(make_manager_group, reverse_code=lambda *args, **kwargs: True)
]

以及一个包含以下测试的简单功能测试应用程序:
from django.contrib.auth.models import Group
from django.contrib.staticfiles.testing import StaticLiveServerTestCase

class FunctionalTest(StaticLiveServerTestCase):

def setUp(self):
print("Groups : {}".format(Group.objects.all()))

def test_2(self):
pass

def test_1(self):
pass

当我运行测试时,我得到:
Creating test database for alias 'default'...
Groups : [<Group: managers>]
.Groups : []
.

显然,创建测试数据库时正在创建组,但是当这个数据库在测试之间重置时,它会重置为空数据库,而不是应用所有迁移后的状态。

模型本身不包含任何特殊内容(我只为迁移创建了一个,而不是第一个,就像在我正在处理的项目中一样,但我不确定是否需要它)。

这是一个错误,还是我遗漏了一些关于数据迁移的内容,以便能够在每次测试开始时创建我的组?

编辑 1:我正在使用 Django 1.8.3

编辑 2: Quick'n'dirty hack 添加到测试类的 setUp 中:
    from django.contrib.auth.models import Group, Permission
if not Group.objects.all():
managers_group = Group(name="managers")
managers_group.save()
managers_group.permissions.add(
Permission.objects.get(codename='add_news'),
Permission.objects.get(codename='change_news'),
Permission.objects.get(codename='delete_news')
)

这几乎是干的,但直到现在,我找不到另一种方式......

最佳答案

我回答我自己的问题:

好像是filed bug已成为 documented

它说使用 TransactionTestCase及其子类(如我的情况 LiveServerTestCase )不会在每次测试之前插入数据迁移。其中第一个只执行一次。

它还说我们可以设置 serialized_rollbackTrue ,这应该强制回滚到已填充的数据库。但就我而言,我遇到的错误与错误报告中的最后一条消息相同。

所以我现在要坚持我的肮脏黑客,也许创建一个数据固定装置,因为它说每次都使用固定装置。

关于django - 仅在第一次测试时执行数据迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31991573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com