gpt4 book ai didi

django - 模型实例 fixture 未保留在数据库中

转载 作者:行者123 更新时间:2023-12-04 16:46:02 26 4
gpt4 key购买 nike

我有一个带有两种方法的测试类,并希望在两种方法之间共享保存的模型实例。

我的固定装置:

@pytest.fixture(scope='class')
def model_factory():
class ModelFactory(object):
def get(self):
x = Model(email='test@example.org',
name='test')
x.save()
return x
return ModelFactory()

@pytest.fixture(scope='class')
def model(model_factory):
m = model_factory.get()
return m

我的期望是只收到 model固定在(两个)我的测试方法上并使其相同,并保留在数据库中:
@pytest.mark.django_db
class TestModel(object):

def test1(self, model):
assert model.pk is not None
Model.objects.get(pk=model.pk) # Works, instance is in the db

def test2(self, model):
assert model.pk is not None # model.pk is the same as in test1
Model.objects.get(pk=model.pk) # Fails:
# *** DoesNotExist: Model matching query does not exist

我已经使用 --pdb 进行了验证结尾 test1 , 正在运行 Model.objects.all()返回我创建的单个实例。同时, psql 没有显示任何记录:
test_db=# select * from model_table;
id | ··· fields
(0 rows)

运行 Model.objects.all()在pdb结尾 test2返回一个空列表,考虑到表是空的,这可能是正确的。
  • 为什么我的模型没有被持久化,而查询仍然返回一个实例?
  • 如果我的 model 在第二次测试中为什么不是查询返回的实例 fixture 标记scope='class'并保存? (这是我最初的问题,直到我发现保存模型对数据库没有任何作用)

  • 使用 django 1.6.1 , pytest-django 2.9.1 , pytest 2.8.5
    谢谢

    最佳答案

    测试必须相互独立。为了确保这一点,Django - 像大多数框架一样 - 在每次测试后清除数据库。见the documentation .

    关于django - 模型实例 fixture 未保留在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35869086/

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