Wenn ich versuche, eine App mit einem Befehl zu testen (ich habe es bemerkt, als ich versucht habe, mein Projekt mithilfe von Fabric bereitzustellen, das diesen Befehl verwendet):
python manage.py test appname
Ich bekomme diesen Fehler:
Creating test database for alias 'default'...
Got an error creating the test database: permission denied to create database
Type 'yes' if you would like to try deleting the test database 'test_finance', or 'no' to cancel
syncdb
Befehl scheint zu funktionieren. Meine Datenbankeinstellungen in settings.py:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'finance', # Or path to database file if using sqlite3.
'USER': 'django', # Not used with sqlite3.
'PASSWORD': 'mydb123', # Not used with sqlite3.
'HOST': '127.0.0.1', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
quelle
GRANT ALL PRIVILEGES ON test_my_db.* TO 'my_user'@'localhost';
Ich habe eine interessante Lösung für Ihr Problem gefunden.
Tatsächlich können Sie für MySQL Berechtigungen für nicht vorhandene Datenbanken gewähren.
So können Sie in Ihren Einstellungen den Namen 'test_finance' für Ihre Testdatenbank hinzufügen:
Starten Sie die MySQL-Shell als Root-Benutzer:
und gewähren Sie jetzt alle Berechtigungen für diese nicht vorhandene Datenbank in MySQL:
Jetzt startet Django problemlos Tests.
quelle
Bei Postgres muss der Benutzer über eine
createdb
Berechtigung verfügen .Siehe diese Dokumentation: https://docs.djangoproject.com/de/2.0/topics/testing/overview/#the-test-database
quelle
Wenn die Datenbank MySQL ist, werden diese beiden Änderungen die Dinge erledigen.
1.Öffnen Sie mysite / mysite / settings.py
Ihre Datenbankeinstellungen sollten einen zusätzlichen TEST-Block haben, wie mit projectname_test gezeigt .
2.Geben Sie den folgenden Befehl über die Eingabeaufforderung mysql oder die mysql workbench ein , um dem in settings.py angegebenen Benutzer alle Berechtigungen zu erteilen
Jetzt kannst du rennen
python manage.py test polls
.quelle
Wenn Sie das verwenden,
docker-compose
was für mich funktioniert hat, war das Folgende:oder
Meine Einstellungen sehen folgendermaßen aus:
und mein
docker-compose.yml
Aussehen wie folgt:quelle
In meinem Fall funktionierten GRANT PRIVILEGES-Lösungen nicht mit Python 3.7.2 , Django 2.1.7 und MySQL 5.6.23 ... Ich weiß nicht warum.
Also habe ich beschlossen, SQLite als TEST-Datenbank zu verwenden ...
Danach läuft das TESTS-Auto ohne Probleme:
quelle
Wow, so dass ich durch die Kombination aller Antworten hier mit ein wenig Optimierung endlich eine funktionierende Lösung für Docker-Compose, Django und Postgres gefunden habe ...
Erstens ist der von noufal valapra gegebene postgres-Befehl nicht korrekt (oder einfach nicht aktuell), er sollte sein:
Im Fall eines Docker-Compose-Setups wird dies in der Datei init.sql gespeichert. So sieht meine aus:
Dann sieht das Dockerfile für Postgres folgendermaßen aus:
Dann hat die Django settings.py diesen Eintrag:
und das Docker-Compose sieht so aus:
Version: '3.6'
Dienstleistungen:
quelle
Vielleicht haben Sie Ihren Test in den Suspended-Modus oder als Hintergrundjob versetzt. Versuchen Sie es mit dem
fg
Befehl in der Bash-Shell.quelle
Ein Superuser-Konto ist der einfachste Weg, um reibungslose Tests zu gewährleisten. Eine einfachere Möglichkeit, den
django
Benutzer su zu machen, besteht darin, dies zu tunALTER django WITH SUPERUSER
.Weitere Informationen finden Sie unter https://www.postgresql.org/docs/current/sql-alteruser.html
quelle