Saya ingin menulis unit test untuk perintah manage.py Django yang melakukan operasi backend pada tabel database. Bagaimana saya menjalankan perintah manajemen langsung dari kode?
Saya tidak ingin mengeksekusi perintah pada shell Sistem Operasi dari tests.py karena saya tidak dapat menggunakan lingkungan pengujian yang diatur menggunakan tes manage.py (database pengujian, kotak keluar email percobaan, dll ...)
sumber
call_command('check')
, untuk memastikan pemeriksaan sistem lulus, dalam ujian.Daripada melakukan trik call_command, Anda dapat menjalankan tugas Anda dengan melakukan:
sumber
call_command
membutuhkan aplikasi yang diuji untuk dimuatINSTALLED_APPS
. Antara harus memuat aplikasi hanya untuk tujuan pengujian dan menggunakan ini, saya memilih ini.call_command
mungkin itulah yang harus dicoba oleh kebanyakan orang. Jawaban ini membantu saya menyelesaikan masalah di mana saya perlu memberikan nama tabel unicode keinspectdb
perintah. python / bash menafsirkan argumentasi baris perintah sebagai ascii, dan itu mengebomget_table_description
panggilan jauh di Django.kode berikut:
... sama dengan perintah berikut yang diketik dalam terminal:
Lihat menjalankan perintah manajemen dari django docs .
sumber
The dokumentasi Django pada call_command yang gagal untuk menyebutkan bahwa
out
harus diarahkan kesys.stdout
. Kode contoh harus dibaca:sumber
Membangun dari jawaban Nate saya punya ini:
Pemakaian:
Keuntungan di sini adalah bahwa jika Anda telah menggunakan opsi tambahan dan OptParse, ini akan memilah Anda. Itu tidak cukup sempurna - dan itu tidak memancarkan output - tetapi akan menggunakan database pengujian. Anda kemudian dapat menguji efek basis data.
Saya yakin penggunaan modul tiruan Micheal Foords dan juga pemasangan stdout selama durasi tes akan berarti Anda bisa mendapatkan lebih banyak dari teknik ini juga - menguji output, kondisi keluar dll.
sumber