У меня есть простое приложение в Django REST, я использую Pymongo для подключения к MongoDB.Моя структура каталогов выглядит следующим образом: -
appauth/
├── apps.py
├── controllers.py
├── databases
│ ├── initialize_databases.py
│ ├── __init__.py
│ ├── mongo_connector.py
│ ├── redis_connections.py
│ ├── redis_connector.py
├── handlers
│ ├── handlers.py
│ ├── __init__.py
├── helpers
│ ├── helpers.py
│ ├── __init__.py
│ ├── permission_loader.py
├── __init__.py
├── model
│ ├── __init__.py
│ ├── users.py
├── tests.py
├── urls.py
Я инициализировал соединение Mongo в коннекторе mongo и импортировал его в initialise_databases.Затем я импортирую его оттуда во все мое приложение, где и когда оно мне нужно.
Моя главная проблема в том, когда я хочу выполнить модульное тестирование, как я специально высмеиваю код БД.
Например:
def login()
//code//
last_filled = db.UserSurvey.find_one({'user_id': user_id})
//code//
db.UserSecurityData.count({'user_id': user_id})
user_role = db.User.find_one({'_id': user_id})
В моих тестах, если сделать что-то вроде
@patch('pymongo.collection.Collection.find_one')
@patch('pymongo.collection.Collection.update')
def test_03_validate_login(self, mocked_update, mocked_find):
mocked_find.return_value = user_findone_return
//user_findone_return is a variable
mocked_update.return_value = user_findone_return
res = self.usr_obj.validate_login(user.email, user.password)
self.assertEqual(res["gender"],'Male')
self.assertEqual(res["password_expires_in"],45.0)
Тест отлично работает с правильными возвращаемыми значениями. Но это похоже на насмешку all вызовы find_one.Мой вопрос состоит в том, как мне высмеивать различные коллекции и их запросы.
Мои настройки БД: -
MONGO_URL = "mongodb://" + MONGO_HOST + ":" + MONGO_PORT + "/" +
MONGO_DB
client = pymongo.MongoClient(MONGO_URL)
db = client.core
Я пробовал @patch('pymongo.core.UserSurvey.find_one')
и подобные итерации.Но, похоже, ничего не работает.