2016-12-14 2 views
0

Ich habe ein Django-Projekt, das Daten aus der Legacy-Datenbank (Nur-Lese-Verbindung) in eine eigene Datenbank zieht. Wenn ich Integrationstests ausführe, versucht es, von test_account über Legacy-Verbindung zu lesen.Django-Komponententest mit veralteter Datenbankverbindung

(1049, "Unknown database 'test_account'") 

Gibt es eine Möglichkeit, Django zu sagen, die alte Verbindung zum Lesen aus der Testdatenbank allein zu lassen?

Antwort

0

Ich habe tatsächlich etwas geschrieben, mit dem Sie einen Integrationstest in djenga erstellen können (verfügbar unter pypi), wenn Sie einen Blick darauf werfen möchten, wie Sie ein separates Integrationstestframework erstellen können. Hier

ist der Test Runner ich benutze, wenn die django Unit-Test-Framework:

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' ] 
0
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/

Sie sollten theoretisch in der Lage sein, die überschreiben die Einstellungen hier zu verwenden, und wechseln Sie zu einem dif