База данных Django Mock не работает должным образом
Я создавал метод модульного тестирования для метода post, но по какой-то причине он продолжает модифицировать реальную базу данных, а не имитацию базы данных. Вот мой тестовый метод:
def test_post_contest(self):
mock_collection = self.mock_db.collection.return_value
mock_document = mock_collection.document.return_value
mock_document.set.return_value = None
response = self.client.post(
reverse('contest-list'),
data={
'ONI2024F2': {
'name': 'ONI2024F2',
'problems': ['problem1', 'problem2'],
'administratorId': '0987654321'
}
},
format='json'
)
self.assertEqual(response.status_code, 201)
self.assertEqual(response.json(), {'id': 'ONI2024F2'})
Это метод setUp:
def setUp(self):
self.client = APIClient()
self.mock_db = patch('firebase_config.db').start()
self.addCleanup(patch.stopall)
А это файл firebase_config.py
import os
import firebase_admin
from firebase_admin import credentials, firestore
#Path to Firebase credentials
cred_path = os.path.join(os.path.dirname(__file__), 'credentials','firebase_credentials.json')
#Initialize Firebase
cred = credentials.Certificate(cred_path)
firebase_admin.initialize_app(cred)
#Firestore client
db = firestore.client()
Я подумал, что дело может быть в файле firebase-config, поэтому попробовал изменить его, но тогда все тесты вызвали исключения.
Вместо from firebase_config import db
используйте import firebase_config
и обращайтесь к базе данных с помощью firebase_config.db
.
Если вы from firebase_config import db
, вам нужно патчить my_module.db
, а не firebase_config.db
.
Но это не масштабируемо; вы же не хотите явно исправлять каждое использование.