Ketika saya mencoba menguji aplikasi apa pun dengan perintah (saya perhatikan ketika saya mencoba menggunakan myproject menggunakan fabric, yang menggunakan perintah ini):
python manage.py test appname
Saya mendapatkan kesalahan ini:
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
Perintah tampaknya berhasil. Pengaturan basis data saya di 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.
}
}
sumber
GRANT ALL PRIVILEGES ON test_my_db.* TO 'my_user'@'localhost';
Saya telah menemukan solusi menarik untuk masalah Anda.
Bahkan untuk MySQL Anda dapat memberikan hak istimewa untuk database yang tidak ada.
Jadi, Anda dapat menambahkan nama 'test_finance' untuk database pengujian di pengaturan Anda:
mulai shell MySQL sebagai pengguna root:
dan sekarang berikan semua hak istimewa ke basis data yang tidak ada ini di MySQL:
Sekarang Django akan memulai tes tanpa masalah.
sumber
Dalam kasus Postgres, pengguna harus memiliki
createdb
izin.Lihat dokumentasi ini: https://docs.djangoproject.com/en/2.0/topics/testing/overview/#the-test-database
sumber
Jika database adalah mysql maka kedua perubahan ini akan menyelesaikan semuanya.
1.Buka mysite / mysite / settings.py
Pengaturan database Anda harus memiliki blok TEST tambahan seperti yang ditunjukkan dengan projectname_test .
2. Ketik perintah di bawah ini menggunakan mysql command prompt atau mysql workbench untuk memberikan semua hak istimewa kepada pengguna yang ditentukan dalam settings.py
Sekarang kamu bisa lari
python manage.py test polls
.sumber
Jika Anda menggunakan
docker-compose
apa yang berfungsi untuk saya adalah sebagai berikut:atau
Pengaturan saya terlihat seperti ini:
dan
docker-compose.yml
penampilan saya sebagai berikut:sumber
Dalam kasus saya, solusi GRANT PRIVILEGES tidak bekerja dengan Python 3.7.2 , Django 2.1.7 dan MySQL 5.6.23 ... Saya tidak tahu mengapa.
Jadi saya memutuskan untuk menggunakan SQLite sebagai database TEST ...
Setelah itu, TESTS mobil berjalan tanpa masalah:
sumber
Wow jadi menggabungkan semua jawaban di sini dengan sedikit penyesuaian akhirnya membuat saya menjadi solusi yang berfungsi untuk menyusun-buruh pelabuhan, Django, dan postgres ...
Pertama perintah postgres yang diberikan oleh noufal valapra tidak benar (atau mungkin tidak saat ini), seharusnya:
Dalam hal pengaturan susunan buruh pelabuhan, ini akan masuk dalam file init.sql, seperti inilah milik saya:
Maka Dockerfile untuk postgres terlihat seperti ini:
Kemudian Django settings.py memiliki entri ini:
dan susunan buruh pelabuhan terlihat seperti ini:
versi: '3.6'
jasa:
sumber
Mungkin Anda meletakkan tes dalam mode ditangguhkan atau sebagai pekerjaan latar belakang. Coba dengan
fg
perintah dalam bash shell.sumber
Akun superuser adalah cara termudah untuk menjamin pengujian yang lancar. jadi cara yang lebih sederhana untuk membuat
django
su pengguna adalah dengan melakukannyaALTER django WITH SUPERUSER
.untuk informasi lebih lanjut https://www.postgresql.org/docs/current/sql-alteruser.html
sumber