pytest / mongoengine отбрасывает коллекцию документов во время тестирования? - PullRequest
0 голосов
/ 06 сентября 2018

Предположим, у меня работает 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, все тесты пройдут.

Что здесь происходит?

...