我有一个包含两种方法的测试类,并希望在两种方法之间共享一个保存的模型实例。
我的装置:
@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()
在末尾运行in pdb 会test2
返回一个空列表,考虑到该表为空,这可能是正确的。
- 为什么我的模型没有被持久化,而查询仍然返回一个实例?
model
如果我的夹具被标记scope='class'
并保存,为什么在第二个测试中查询没有返回实例?(这是我最初的问题,直到我发现保存模型对数据库没有任何作用)
使用django 1.6.1
, pytest-django 2.9.1
,pytest 2.8.5
谢谢