Предположим, у меня работает mongodb localhost
. Я пытаюсь запустить набор py.test
для моего проекта с использованием базы данных tmpdb
, которая будет отброшена во время демонтажа. Мой conftest.py
это:
import pytest
import mongoengine as me
from pymongo import MongoClient
@pytest.fixture(autouse=True)
def tmpdb():
cc: MongoClient = me.connect('tmpdb')
yield cc
cc.drop_database('tmpdb')
cc.close()
и простой тест:
import pytest
import random
import typing
import mongoengine as me
import shapely.geometry as geo
class Points(me.Document):
p = me.PointField()
mp = me.MultiPointField()
Pair = typing.Tuple[float, float]
IterPair = typing.Iterable[Pair]
def generator(i: int) -> IterPair:
for _ in range(i):
x = random.uniform(-179, 180)
y = random.uniform(-89, 90)
yield x, y
@pytest.fixture
def point() -> geo.Point:
return geo.Point(list(generator(1)))
@pytest.fixture
def multipoint() -> geo.MultiPoint:
return geo.MultiPoint(list(generator(2)))
def test_init_and_save(point: geo.Point, multipoint: geo.MultiPoint):
# me.connect('tmpdb')
# Points.drop_collection()
new = Points()
new.p = geo.mapping(point)
new.mp = geo.mapping(multipoint)
new.save()
def test_query_within_box():
box = [[-180, -90], [180, 90]]
qry = Points.objects(p__geo_within_box=box)
obj = qry.first()
assert obj is not None
По какой-то причине test_query_within_box
терпит неудачу; то есть запрос не может вернуть результаты (как будто база данных была отброшена между тестами). Этого не должно происходить, поскольку tmpdb
прибор не должен сноситься до тех пор, пока все тесты не завершат хотя бы одну функцию тестирования с использованием tmpdb
прибора, выходящего из области действия?
Если я закомментирую conftest.py
и раскомментирую строки в test_init_and_save
, все тесты пройдут.
Что здесь происходит?