Django unittest с устаревшим подключением к базе данных

У меня есть проект Django, который извлекает данные из устаревшей базы данных (соединение только для чтения) в свою собственную базу данных, и когда я запускаю интеграционные тесты, он пытается читать из test_account при устаревшем соединении.

(1049, "Unknown database 'test_account'")

Есть ли способ сказать Django оставить устаревшее соединение в покое для чтения из тестовой базы данных?


person James Lin    schedule 14.12.2016    source источник


Ответы (2)


На самом деле я написал кое-что, что позволяет вам создавать интеграционные тесты в djenga (доступно на pypi), если вы хотите взглянуть на то, как создать отдельную платформу интеграционных тестов.

Вот средство запуска тестов, которое я использую при использовании фреймворка модульного тестирования django:

from django.test.runner import DiscoverRunner
from django.apps import apps
import sys

class UnManagedModelTestRunner(DiscoverRunner):
    """
    Test runner that uses a legacy database connection for the duration of the test run.
    Many thanks to the Caktus Group: https://www.caktusgroup.com/blog/2013/10/02/skipping-test-db-creation/
    """
    def __init__(self, *args, **kwargs):
        super(UnManagedModelTestRunner, self).__init__(*args, **kwargs)
        self.unmanaged_models = None
        self.test_connection = None
        self.live_connection = None
        self.old_names = None

    def setup_databases(self, **kwargs):
        # override keepdb so that we don't accidentally overwrite our existing legacy database
        self.keepdb = True
        # set the Test DB name to the current DB name, which makes this more of an
        # integration test, but HEY, at least it's a start
        DATABASES['legacy']['TEST'] = { 'NAME': DATABASES['legacy']['NAME'] }
        result = super(UnManagedModelTestRunner, self).setup_databases(**kwargs)

        return result

# Set Django's test runner to the custom class defined above
TEST_RUNNER = 'config.settings.test_settings.UnManagedModelTestRunner'
TEST_NON_SERIALIZED_APPS = [ 'legacy_app' ]
person 2ps    schedule 15.12.2016

from django.test import TestCase, override_settings

@override_settings(LOGIN_URL='/other/login/')
class LoginTestCase(TestCase):

    def test_login(self):
        response = self.client.get('/sekrit/')
        self.assertRedirects(response, '/other/login/?next=/sekrit/')

https://docs.djangoproject.com/en/1.10/topics/testing/tools/

Теоретически вы должны иметь возможность использовать здесь настройки переопределения и переключаться на другое.

person yrekkehs    schedule 15.12.2016