Ich versuche, einen einfachen Django-Test mit einer tests.py Datei in einem Django App-Verzeichnis (mysite/polls/tests.py), aber jeder tun Mal, wenn ich ‚python manage.py Testumfragen‘ laufen lasse, erhalte ich die Fehlermeldung:Django Test Fehler "Berechtigung verweigert Datenbank erstellen" - Mit Heroku Postgres
C:\Python27\python.exe "C:\Program Files (x86)\JetBrains\PyCharm 3.0\helpers\pycharm\django_test_manage.py" test polls "C:\Users\<myname>\PycharmProjects\mysite"
Testing started at 8:40 PM ...
Creating test database for alias 'default'...
Type 'yes' if you would like to try deleting the test database 'test_<database>', or 'no' to cancel: Got an error creating the test database: permission denied to create database
Von dem, was ich gelesen habe, offenbar Heroku PG verwendet eine gemeinsame Datenbank, so dass ich nicht über die Berechtigung zum erstellen/zerstören Datenbanken, die zum Testen notwendig sind. Gibt es dafür eine offensichtliche Lösung? Ich entwickle immer noch auf meinem lokalen Laufwerk, so dass jede Umgehungslösung geschätzt würde. Ich weiß, dass Testen ein wichtiger Teil der Programmierung ist. Daher würde ich gerne in der Lage sein, eine Testmethode so schnell wie möglich zu implementieren.
Ich versuche, mit der TestCase
Django-Klasse zu testen.
Was ich benutze:
1) Heroku Postgres Hobby Dev-Plan
2) Postgres 9.3.3
3) Python 2.7.6
4) Django 1.6.1
EDIT: Nach ein bisschen mehr Forschung, fand ich heraus, dass ich meine DATABASES
dict-Variable in settings.py überschreiben kann, um mit SQLite lokal zu testen (wenn 'test' ein Argument in der Shell ist), aber ich würde trotzdem eine PostgreSQL-Implementierung bevorzugen Seit dem, was ich gelesen habe, ist PostgreSQL strenger (wovon ich ein Fan bin).
Für interessierte jedermann in der semi-Lösung habe ich (mit freundlicher Genehmigung von einem anderen Mitglied von Stackoverflow) gefunden:
if 'test' in sys.argv:
DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3'}
nicht sys
zu importieren Vergessen.
Djangos Tests in Isolation arbeiten, so dass jeder Test stellt eine neue Datenbank auf, läuft der Test, löscht dann diese Datenbank, um sicherzustellen, dass es keine Kreuzreden gibt, wenn Sie z. B. zählen oder beitreten. – Soviut