База данных 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.
Но это не масштабируемо; вы же не хотите явно исправлять каждое использование.

Вернуться на верх