{"title":"Satuan percobaan","version":"2.1","locale":"id","docname":"internals/contributing/writing-code/unit-tests","url":"/id/2.1/internals/contributing/writing-code/unit-tests/","canonical":"https://djangodocs.dev/id/2.1/internals/contributing/writing-code/unit-tests/","summary":"Django datang dengan deretan percobaan dia sendiri, di pelipat tests dari kode dasar. Itu kebijakan kami untuk memastikan semua percobaan selalu lolos. Kami…","html":"<h1>Satuan percobaan<a class=\"heading-anchor\" href=\"#unit-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django datang dengan deretan percobaan dia sendiri, di pelipat <code class=\"docutils literal notranslate\"><span class=\"pre\">tests</span></code> dari kode dasar. Itu kebijakan kami untuk memastikan semua percobaan selalu lolos.</p>\n<p>Kami menghargai apapun dan semua bantuan pada deretan percobaan!</p>\n<p>Percobaan Django semua menggunakan infrastruktur percobaan yang dikirim dengan Django untuk aplikasi percobaan. Lihat <a class=\"reference internal\" href=\"/id/2.1/topics/testing/overview/\"><span class=\"doc\">Menulis dan menjalankan percobaan</span></a> untuk sebuah penjelasan bagaimana menulis percobaan baru.</p>\n<section id=\"running-the-unit-tests\">\n<span id=\"running-unit-tests\"></span><h2>Menjalankan satuan percobaan<a class=\"heading-anchor\" href=\"#running-the-unit-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"quickstart\">\n<h3>Mulai cepat<a class=\"heading-anchor\" href=\"#quickstart\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Pertama, <a class=\"reference external\" href=\"https://github.com/django/django/fork\">fork Django on GitHub</a>.</p>\n<p>Kedua, buat dan aktifkan lingkungan maya. Jika anda tidak akrab dengan bagaimana melakukan itu, baca <a class=\"reference internal\" href=\"/id/2.1/intro/contributing/\"><span class=\"doc\">contributing tutorial</span></a> kami.</p>\n<p>Selanjutnya, klon fork anda, pasang beberapa persyaratan, dan jalankan percobaan:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>git<span class=\"w\"> </span>clone<span class=\"w\"> </span>git@github.com:YourGitHubName/django.git<span class=\"w\"> </span>django-repo\n<span class=\"gp\">$ </span><span class=\"nb\">cd</span><span class=\"w\"> </span>django-repo/tests\n<span class=\"gp\">$ </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>-e<span class=\"w\"> </span>..\n<span class=\"gp\">$ </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>-r<span class=\"w\"> </span>requirements/py3.txt\n<span class=\"gp\">$ </span>./runtests.py\n</code></pre></div>\n<p>Memasang membutuhkan akan sepertinya membutuhkan beberapa paket sistem operasi dimana komputer anda tidak dipasang. Anda dapat biasanya mencari tahu paket mana untuk dipasang dengan melakukan pencarian Jaringan untuk baris terakhir atau selanjutnya dari pesan kesalahan. Coba menambahkan sistem operasi anda pada permintaan pencarian jika dibutuhkan.</p>\n<p>Jika anda mempunyai masalah memasang persyaratan, anda dapat melewatkan langkah itu. Lihat <a class=\"reference internal\" href=\"#running-unit-tests-dependencies\"><span class=\"std std-ref\">Menjalankan semua percobaan</span></a> untuk rincian pada memasang pilihan percobaan ketergantungan. Jika anda tidak mempunyai pilihan ketergantungan terpasang, percobaan yang membutuhkan itu akan dilewatkan.</p>\n<p>Menjalankan percobaan membutuhkan modul pengaturan Django yang menentukan basisdata untuk digunakan. Untuk membuatnya mudah dijalankan, Django menyediakan dan menggunakan contoh modul pengaturan yang menggunakan basisdata SQLite. Lihat <a class=\"reference internal\" href=\"#running-unit-tests-settings\"><span class=\"std std-ref\">Gunakan modul pengaturan lain</span></a> untuk mempelajari bagaimana pebedaan modul pengaturan untuk menjalankan percobaan dengan basisdata berbeda.</p>\n<aside class=\"admonition-windows-users admonition\">\n<p class=\"admonition-title\">Pengguna Windows</p>\n<p>Kami menganjurkan sesuatu seperti <a class=\"reference external\" href=\"https://msysgit.github.io/\">Git Bash</a> untuk menjalankan percobaan menggunakan pendekatan diatas.</p>\n</aside>\n<p>Mempunyai masalah? Lihat <a class=\"reference internal\" href=\"#troubleshooting-unit-tests\"><span class=\"std std-ref\">Menyelesaikan masalah</span></a> untuk beberapa masalah umum.</p>\n</section>\n<section id=\"running-tests-using-tox\">\n<h3>Menjalankan percobaan menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code><a class=\"heading-anchor\" href=\"#running-tests-using-tox\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference external\" href=\"https://tox.readthedocs.io/\">Tox</a> adalah sebuah alat untuk menjalankan percobaan dalam lingkungan maya berbeda. Django menyertakan sebuah dasar <code class=\"docutils literal notranslate\"><span class=\"pre\">tox.ini</span></code> yang mengotomatisasi beberapa pemeriksaan peladen yang kami bangun melakukan pada pull request. Untuk menjalankan satuan percobaan dan pemeriksaan lain (seperti <span class=\"xref std std-ref\">import sorting 1</span>, the <span class=\"xref std std-ref\">documentation spelling checker 2</span>, dan <span class=\"xref std std-ref\">code formatting 3</span>), pasang dan jalankan perintah <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code> dari tempat manapun dalam pohon sumber Django:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>tox\n<span class=\"gp\">$ </span>tox\n</code></pre></div>\n<p>Secara awalan, <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code> menjalankan rangkaian percobaan dengan gabungan berkas pengaturan percobaan untuk SQLite, <code class=\"docutils literal notranslate\"><span class=\"pre\">flake8</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">isort</span></code>, dan dokumentasi pemeriksa ejaan. Sebagai tambahan pada ketergantungan sistem dicatat di tempat lain dalam dokumentasi ini, perintah <code class=\"docutils literal notranslate\"><span class=\"pre\">python3</span></code> harus berada pada jalur anda dan terkait ke versi sesuai dari Python. Daftar dari lingkungan awal dapat dilihat sebagai berikut:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>tox<span class=\"w\"> </span>-l\n<span class=\"go\">py3</span>\n<span class=\"go\">flake8</span>\n<span class=\"go\">docs</span>\n<span class=\"go\">isort</span>\n</code></pre></div>\n<section id=\"testing-other-python-versions-and-database-backends\">\n<h4>Mencoba versi Python lain dan backend basisdata<a class=\"heading-anchor\" href=\"#testing-other-python-versions-and-database-backends\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Sebagai tambahan ke lingkungan awalan, <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code> mendukung menjalankan rangkaian satuan untuk versi lain dari Python dan backend basisdata lain. Sejak rangkaian percobaan Django tidak menggabungkan sebuah berkas pengaturan untuk backend basisdata selain dari SQLite, bagaimanapun, anda harus <a class=\"reference internal\" href=\"#running-unit-tests-settings\"><span class=\"std std-ref\">create and provide your own test settings</span></a>. Sebagai contoh, untuk menjalankan percobaan pada Python 3.5 menggunakan PostgreSQL:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>tox<span class=\"w\"> </span>-e<span class=\"w\"> </span>py35-postgres<span class=\"w\"> </span>--<span class=\"w\"> </span>--settings<span class=\"o\">=</span>my_postgres_settings\n</code></pre></div>\n<p>Perintah ini menyetel lingkungan maya Python 3.5, memasang ketergantungan rangkaian percobaan Django (termasuk itu untuk PostgreSQL), dan memanggil <code class=\"docutils literal notranslate\"><span class=\"pre\">runtests.py</span></code> dengan argumen didukung (dalam kasus ini, <code class=\"docutils literal notranslate\"><span class=\"pre\">--settings=my_postgres_settings</span></code>).</p>\n<p>Sisa dari dokumentasi ini menunjukkan perintah untuk menjalankan percobaan tanpa <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code>, bagaimanapun, pilihan apapun dilewatkan ke <code class=\"docutils literal notranslate\"><span class=\"pre\">runtests.py</span></code> dapat juga dilewatkan ke <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code> dengan menaruh di awalan daftar argumen dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">--</span></code>, seperti diatas.</p>\n<p>Tox juga menghormati variabel lingkungan <code class=\"docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code>, jika disetel. Sebagai contoh, berikut adalah setara pada perintah diatas:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span><span class=\"nv\">DJANGO_SETTINGS_MODULE</span><span class=\"o\">=</span>my_postgres_settings<span class=\"w\"> </span>tox<span class=\"w\"> </span>-e<span class=\"w\"> </span>py35-postgres\n</code></pre></div>\n</section>\n<section id=\"running-the-javascript-tests\">\n<h4>Menjalankan percobaan JavaScript<a class=\"heading-anchor\" href=\"#running-the-javascript-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Django menyertakan sekumpulan dari <a class=\"reference internal\" href=\"/id/2.1/internals/contributing/writing-code/javascript/#javascript-tests\"><span class=\"std std-ref\">JavaScript unit tests</span></a> untuk fungsi-fungsi dalam aplikasi bantuan tertentu. Percobaan JavaScript tidak berjalan secara awalan menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code> karena mereka membutuhkan Node.js untuk dipasang dan tidak perlu untuk tambalan-tambalan kebanyakan. Untuk menjalankan percobaan JavaScript menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code>:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>tox<span class=\"w\"> </span>-e<span class=\"w\"> </span>javascript\n</code></pre></div>\n<p>Perintah ini menjalankan <code class=\"docutils literal notranslate\"><span class=\"pre\">npm</span> <span class=\"pre\">install</span></code> untuk memastikan persyaratan percobaan terperbaharui dan kemudian menjalankan <code class=\"docutils literal notranslate\"><span class=\"pre\">npm</span> <span class=\"pre\">test</span></code>.</p>\n</section>\n</section>\n<section id=\"using-another-settings-module\">\n<span id=\"running-unit-tests-settings\"></span><h3>Gunakan modul <code class=\"docutils literal notranslate\"><span class=\"pre\">pengaturan</span></code> lain<a class=\"heading-anchor\" href=\"#using-another-settings-module\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Modul pengaturan disertakan (<code class=\"docutils literal notranslate\"><span class=\"pre\">tests/test_sqlite.py</span></code>) mengizinkan anda menjalankan deretan percobaan menggunakan SQLite. Jika anda ingin menjalankan percobaan menggunakan basisdata berbeda, anda akan butuh menentukan berkas pengaturan anda. Beberapa percobaan, seperti itu untuk <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.postgres</span></code>, adalah khusus untuk backend basisdata tertentu dan akan dilewati jika berjalan dengan backend berbeda.</p>\n<p>Untuk menjalankan percobaan dengan pengaturan berbeda, pastikan bahwa modul berada di <code class=\"docutils literal notranslate\"><span class=\"pre\">PYTHONPATH</span></code> anda dan lewati modul dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">--settings</span></code>.</p>\n<p>Pengaturan <a class=\"reference internal\" href=\"/id/2.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a> dalam modul pengaturan percobaan apapun butuh menentukan dua basisdata:</p>\n<ul class=\"simple\">\n<li><p>Basisdata <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>. Basisdata ini harus menggunakan backend yang anda ingin menggunakan untuk percobaan utama.</p></li>\n<li><p>Sebuah basisdata dengan nama lain <code class=\"docutils literal notranslate\"><span class=\"pre\">other</span></code>. Basisdata <code class=\"docutils literal notranslate\"><span class=\"pre\">other</span></code> digunakan untuk mencoba permintaan itu dapat dialihkan ke basisdata berbeda. Basisdata ini harus menggunakan backend sama seperti <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>, dan itu harus mempunyai nama berbeda.</p></li>\n</ul>\n<p>Jika anda menggunakan backend yang bukan SQLite, anda akan butuh menyediakan rincian lain untuk setiap basisdata:</p>\n<ul class=\"simple\">\n<li><p>Pilihan <a class=\"reference internal\" href=\"/id/2.1/ref/settings/#std-setting-USER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USER</span></code></a> butuh menentukan akun pengguna yang ada ntuk basisdata. Bahwa pengguna butuh perizinan untuk menjalankan <code class=\"docutils literal notranslate\"><span class=\"pre\">CREATE</span> <span class=\"pre\">DATABASE</span></code> sehingga basisdata percobaan dapat dibuat.</p></li>\n<li><p>Pilihan <a class=\"reference internal\" href=\"/id/2.1/ref/settings/#std-setting-PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">PASSWORD</span></code></a> butuh disediakan sandi untuk the <a class=\"reference internal\" href=\"/id/2.1/ref/settings/#std-setting-USER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USER</span></code></a> yang telah ditentukan.</p></li>\n</ul>\n<p>Basisdata percobaan mendapatkan nama-nama mereka dengan mengawali <code class=\"docutils literal notranslate\"><span class=\"pre\">test_</span></code> pada nilai dari pengaturan <a class=\"reference internal\" href=\"/id/2.1/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">NAME</span></code></a> untuk basisdata ditentukan di <a class=\"reference internal\" href=\"/id/2.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a>. Basisdata percobaan ini dihapus ketika percobaan selesai.</p>\n<p>Anda akan juga butuh memastikan bahwa basisdata anda menggunakan UTF-8 sebagai kumpulan karakter awal. Jika peladen basisdata anda tidak menggunakan UTF-8 sebagai kumpulan karakter awal, anda akan butuh menyertakan sebuah nilai untuk <a class=\"reference internal\" href=\"/id/2.1/ref/settings/#std-setting-TEST_CHARSET\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CHARSET</span></code></a> di kamus pengaturan untuk basisdata yang berlaku.</p>\n</section>\n<section id=\"running-only-some-of-the-tests\">\n<span id=\"runtests-specifying-labels\"></span><h3>Menjalankan hanya beberapa untuk percobaan<a class=\"heading-anchor\" href=\"#running-only-some-of-the-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Deretan percobaan keseluruhan Django perlu waktu untuk berjalan, dan menjalankan setiap percobaan tunggal yang dapat berulang jika, katakan, anda cukup menambahkan percobaan pada Django yang anda ingin jalankan secara cepat tanpa menjalankan yang lainnya. Anda dapat menjalankan subkumpulan dari satuan percobaan dengan menambahkan nama-nama dari modul percobaan pada <code class=\"docutils literal notranslate\"><span class=\"pre\">runtests.py</span></code> di baris perintah.</p>\n<p>Sebagai contoh, jika anda ingin menjalankan percobaan hanya untuk hubungan umum dan internasionalisasi, ketik:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>--settings<span class=\"o\">=</span>path.to.settings<span class=\"w\"> </span>generic_relations<span class=\"w\"> </span>i18n\n</code></pre></div>\n<p>Bagaimana anda menemukan nama-nama dari percobaan perorangan? Lihat di <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/</span></code> — setiap nama pelipat ada nama dari percobaan.</p>\n<p>Jika anda hanya ingin menjalankan kelas tertentu dari percobaan, anda dapat menentukan daftar jalur-jalur dari kelas-kelas percobaan perseorangan. Sebagai contoh, untuk menjalankan <code class=\"docutils literal notranslate\"><span class=\"pre\">TranslationTests</span></code> dari modul <code class=\"docutils literal notranslate\"><span class=\"pre\">i18n</span></code>, ketik:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>--settings<span class=\"o\">=</span>path.to.settings<span class=\"w\"> </span>i18n.tests.TranslationTests\n</code></pre></div>\n<p>Melampaui itu, anda dapat menentukan sebuah cara percobaan perorangan seperti ini:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>--settings<span class=\"o\">=</span>path.to.settings<span class=\"w\"> </span>i18n.tests.TranslationTests.test_lazy_objects\n</code></pre></div>\n</section>\n<section id=\"running-the-selenium-tests\">\n<h3>Menjalankan percobaan Selenium<a class=\"heading-anchor\" href=\"#running-the-selenium-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Beberapa percobaan membutuhkan Selenium dan perambah Jaringan. Untuk menjalankan percobaan ini, anda harus memasang paket <a class=\"reference external\" href=\"https://pypi.org/project/selenium/\">selenium</a> dan menjalankan percobaan dengan pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">--selenium=&lt;BROWSERS&gt;</span></code>. Sebagai contoh, jika anda mempunyai Firefox dan Google Chrome terpasang:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>--selenium<span class=\"o\">=</span>firefox,chrome\n</code></pre></div>\n<p>Lihat paket <a class=\"reference external\" href=\"https://github.com/SeleniumHQ/selenium/tree/master/py/selenium/webdriver\">selenium.webdriver</a> untuk daftar perambah tersedia.</p>\n<p>Menentukan <code class=\"docutils literal notranslate\"><span class=\"pre\">--selenium</span></code> otomatis menyetel <code class=\"docutils literal notranslate\"><span class=\"pre\">--tags=selenium</span></code> untuk berjalan hanya percobaan yang membutuhkan selenium.</p>\n</section>\n<section id=\"running-all-the-tests\">\n<span id=\"running-unit-tests-dependencies\"></span><h3>Menjalankan semua percobaan<a class=\"heading-anchor\" href=\"#running-all-the-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jika anda ingin menjalankan deretan lengkap dari percobaan, anda akan butuh memasang sejumlah ketergantungan:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/argon2_cffi/\">argon2-cffi</a> 16.1.0+</p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/bcrypt/\">bcrypt</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/docutils/\">docutils</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/geoip2/\">geoip2</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/jinja2/\">jinja2</a> 2.7+</p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/numpy/\">numpy</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/Pillow/\">Pillow</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pyyaml.org/wiki/PyYAML\">PyYAML</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/pytz/\">pytz</a> (wajib)</p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/setuptools/\">setuptools</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://memcached.org/\">memcached</a>, ditambah <a class=\"reference internal\" href=\"/id/2.1/topics/cache/#memcached\"><span class=\"std std-ref\">supported Python binding</span></a></p></li>\n<li><p><a class=\"reference external\" href=\"https://www.gnu.org/software/gettext/manual/gettext.html\">gettext</a> (<a class=\"reference internal\" href=\"/id/2.1/topics/i18n/translation/#gettext-on-windows\"><span class=\"std std-ref\">gettext pada Windows</span></a>)</p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/selenium/\">selenium</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://pypi.org/project/sqlparse/\">sqlparse</a></p></li>\n</ul>\n<p>Anda dapat menemukan ketergantungan ini di <a class=\"reference external\" href=\"https://pip.pypa.io/en/latest/user_guide/#requirements-files\">pip requirements files</a> dalam pelipat  <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/requirements</span></code> dari pohon sumber Django dan pasang mereka seperti itu:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>-r<span class=\"w\"> </span>tests/requirements/py3.txt\n</code></pre></div>\n<p>Jika anda menjumpai sebuah kesalahan selama pemasangan, sistem anda mungkin kehilangan ketergantungan dari satu atau lebih paket-paket Python. Rundingkan dokumentasi paket-paket gagal atau cari Jaringan dengan pesan kesalahan yang anda jumpai.</p>\n<p>Anda dapat juga memasang pencocok basisdata dari pilihan anda menggunakan oracle.txt`, <code class=\"docutils literal notranslate\"><span class=\"pre\">mysql.txt</span></code>, atau <code class=\"docutils literal notranslate\"><span class=\"pre\">postgres.txt</span></code>.</p>\n<p>Jika anda ingin mencoba backend penyimpanan memcache, anda akan juga butuh menentukan pengaturan <a class=\"reference internal\" href=\"/id/2.1/ref/settings/#std-setting-CACHES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CACHES</span></code></a> yang menunjuk pada contoh memcache anda.</p>\n<p>Untuk menjalankan percobaan GeoDjango, anda akan butuh untuk <a class=\"reference internal\" href=\"/id/2.1/ref/contrib/gis/install/\"><span class=\"doc\">setup a spatial database and install the Geospatial libraries</span></a>.</p>\n<p>Masing-masing ketergantungan ini adalah pilihan. Jika anda kehilangan salah satu dari mereka, percobaan terkait akan dilewati.</p>\n</section>\n<section id=\"code-coverage\">\n<h3>Cakupan kode<a class=\"heading-anchor\" href=\"#code-coverage\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Pembantu mendorong menjalankan cakupan pada deretan percobaan untuk mencirikan kawasan yang butuh percobaan tambahan. Pemasangan alat cakupan dan penggunaan digambarkan dalam <a class=\"reference internal\" href=\"/id/2.1/topics/testing/advanced/#topics-testing-code-coverage\"><span class=\"std std-ref\">testing code coverage</span></a>.</p>\n<p>Cakupan harus berjalan di pengolahan tunggal untuk mendapatkan statistik yang tepat. Untuk menjalankan cakupan pada deretan percobaan Django menggunakan pengaturan percobaan biasa:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>coverage<span class=\"w\"> </span>run<span class=\"w\"> </span>./runtests.py<span class=\"w\"> </span>--settings<span class=\"o\">=</span>test_sqlite<span class=\"w\"> </span>--parallel<span class=\"o\">=</span><span class=\"m\">1</span>\n</code></pre></div>\n<p>Setelah menjalankan cakupan, bangkitkan laporan html dengan menjalankan:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>coverage<span class=\"w\"> </span>html\n</code></pre></div>\n<p>Ketika menjalankan cakupan untuk percobaan Django, pengaturan <code class=\"docutils literal notranslate\"><span class=\"pre\">.coveragerc</span></code> yang disertakan menentukan <code class=\"docutils literal notranslate\"><span class=\"pre\">coverage_html</span></code> sebagai pelipat keluaran untuk laporan dan juga mengecualikan beberapa pelipat tidak terkait pada hasil (kode percobaan atau kode dikecualikan disertakan di Django).</p>\n</section>\n</section>\n<section id=\"contrib-apps\">\n<span id=\"id1\"></span><h2>Aplikasi bantuan<a class=\"heading-anchor\" href=\"#contrib-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Percobaan untuk aplikasi bantuan dapat ditemukan dalam pelipat <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/</span></code>, khususnya dibawah <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;app_name&gt;_tests</span></code>. Sebagai contoh, percobaan untuk <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.auth</span></code> ditempatkan dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/auth_tests</span></code>.</p>\n</section>\n<section id=\"troubleshooting\">\n<span id=\"troubleshooting-unit-tests\"></span><h2>Menyelesaikan masalah<a class=\"heading-anchor\" href=\"#troubleshooting\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"many-test-failures-with-unicodeencodeerror\">\n<h3>Banyak percobaan gagal dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">UnicodeEncodeError</span></code><a class=\"heading-anchor\" href=\"#many-test-failures-with-unicodeencodeerror\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jika paket <code class=\"docutils literal notranslate\"><span class=\"pre\">locales</span></code> tidak terpasang, beberapa percobaan akan gagal dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">UnicodeEncodeError</span></code>.</p>\n<p>Anda dapat menyelesaikan pada sistem berbasis-Debian, sebagai contoh, dengan menjalankan:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>apt-get<span class=\"w\"> </span>install<span class=\"w\"> </span>locales\n<span class=\"gp\">$ </span>dpkg-reconfigure<span class=\"w\"> </span>locales\n</code></pre></div>\n<p>Anda dapat menyelesaikan untuk sistem macOS dengan mengkonfigurasi lokal shell anda:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span><span class=\"nb\">export</span><span class=\"w\"> </span><span class=\"nv\">LANG</span><span class=\"o\">=</span><span class=\"s2\">&quot;en_US.UTF-8&quot;</span>\n<span class=\"gp\">$ </span><span class=\"nb\">export</span><span class=\"w\"> </span><span class=\"nv\">LC_ALL</span><span class=\"o\">=</span><span class=\"s2\">&quot;en_US.UTF-8&quot;</span>\n</code></pre></div>\n<p>Jalankan perintah <code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code> untuk menegaskan perubahan. Pilihannya, tambah perintah ekpos tersebut pada berkas awalan shell anda (sebagai contoh <code class=\"docutils literal notranslate\"><span class=\"pre\">~/.bashrc</span></code> untuk Bash) untuk menghindari mengetik kembali mereka.</p>\n</section>\n<section id=\"tests-that-only-fail-in-combination\">\n<h3>Percobaan hanya gagal di kombinasi<a class=\"heading-anchor\" href=\"#tests-that-only-fail-in-combination\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Dalam hal sebuah percobaan lulus ketika berjalan di pemisahan tetapi gagal dalam deretan keseluruhan, kami mempunyai beberapa alat untuk membantu menganalisa masalah.</p>\n<p>Pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">--bisect</span></code> dari <code class=\"docutils literal notranslate\"><span class=\"pre\">runtests.py</span></code> akan menjalankan  percobaan kegagalan selama separuh kumpulan percobaan yang dijalankan bersama-sama pada setiap putaran, sering membuatnya memungkinkan untuk mencirikan sejumlah kecil dari percobaan yang mungkin terkait terhadap kegagalan.</p>\n<p>Sebagai contoh, andaikan percobaan gagal bekerja dengan sendirinya adalah <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelTest.test_eq</span></code>, lalu gunakan:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>--bisect<span class=\"w\"> </span>basic.tests.ModelTest.test_eq\n</code></pre></div>\n<p>akan mencoba menentukan percobaan yang mencampuri dengan satu yang diberikan. Pertama, percobaan berjalan dengan babak pertama dari deretan percobaan. Jika kegagalan muncul, babak pertama dari deretan percobaan dipisah dalam dua kelompok dan setiap kelompok berjalan dengan percobaan yang ditentukan. Jika tidak ada kegagalan dengan babak pertama dari deretan percobaan, babak kedua dari deretan percobaan berjalan dengan percobaan yang ditentukan dan dipisah dengan benar seperti digambarkan di awal. Pengolahan berulang sampai kumpulan percobaan kegagalan kecil.</p>\n<p>Pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">--pair</span></code> menjalankan percobaan yang diberikan disamping setiap percobaan lain dari deretan, membiarkan anda memeriksa jika percobaan lain mempunyai efek-samping yang menyebabkan kegagal. Jadi:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>--pair<span class=\"w\"> </span>basic.tests.ModelTest.test_eq\n</code></pre></div>\n<p>akan memperbaiki <code class=\"docutils literal notranslate\"><span class=\"pre\">test_eq</span></code> dengan setiap label percobaan.</p>\n<p>Dengan kedua <code class=\"docutils literal notranslate\"><span class=\"pre\">--bisect</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">--pair</span></code>, jika anda sudah menduga kasus mana mungkin bertanggungjawab untuk kegagalan, anda mungkin membatasi percobaan untuk dianalisa silang oleh <a class=\"reference internal\" href=\"#runtests-specifying-labels\"><span class=\"std std-ref\">specifying further test labels</span></a> setelah satu yang pertama:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>--pair<span class=\"w\"> </span>basic.tests.ModelTest.test_eq<span class=\"w\"> </span>queries<span class=\"w\"> </span>transactions\n</code></pre></div>\n<p>Anda dapat juga mencoba menjalankan kumpulan apapun dari percobaan dalam membalikkan menggunakan pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">--reverse</span></code> untuk mengecek bahwa percobaan yang dijalankan di perintah berbeda tidak menyebabkan masalah apapun:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>basic<span class=\"w\"> </span>--reverse\n</code></pre></div>\n</section>\n<section id=\"seeing-the-sql-queries-run-during-a-test\">\n<h3>Melihat permintaan SQL berjalan selama percobaan<a class=\"heading-anchor\" href=\"#seeing-the-sql-queries-run-during-a-test\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Jika anda berharap menguji SQL yang sedang berjalan dalam percobaan kegagalan, anda dapat menyalakan <a class=\"reference internal\" href=\"/id/2.1/topics/logging/#django-db-logger\"><span class=\"std std-ref\">SQL logging</span></a> menggunakan pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">--debug-sql</span></code>. Jika anda menggabungkan ini dengan <code class=\"docutils literal notranslate\"><span class=\"pre\">--verbosity=2</span></code>, semua permintaan SQL akan mengeluarkan:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>basic<span class=\"w\"> </span>--debug-sql\n</code></pre></div>\n</section>\n<section id=\"seeing-the-full-traceback-of-a-test-failure\">\n<h3>Melihat melacak kembali penuh dari kegagalan percobaan<a class=\"heading-anchor\" href=\"#seeing-the-full-traceback-of-a-test-failure\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Secara awal percobaan berjalan di paralel dengan satu pengolahan per inti. Ketika percobaan berjalan di paralel, bagaimanapun, anda akan hanya melihat pelacakan terpotong untuk tiap kegagalan percobaan. Anda dapat menyesuaikan kebiasaan ini dengan pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">--parallel</span></code>:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>basic<span class=\"w\"> </span>--parallel<span class=\"o\">=</span><span class=\"m\">1</span>\n</code></pre></div>\n<p>Anda dapat juga menggunakan variabel lingkungan <code class=\"docutils literal notranslate\"><span class=\"pre\">DJANGO_TEST_PROCESSES</span></code> untuk tujuan ini.</p>\n</section>\n<section id=\"tips-for-writing-tests\">\n<h3>Tip untuk menulis percobaan<a class=\"heading-anchor\" href=\"#tips-for-writing-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<section id=\"isolating-model-registration\">\n<h4>Mengasingkan pendaftaran model<a class=\"heading-anchor\" href=\"#isolating-model-registration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Untuk menghindari registrar <a class=\"reference internal\" href=\"/id/2.1/ref/applications/#django.apps.apps\" title=\"django.apps.apps\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">apps</span></code></a> global dan mencegah pembuatan tabel tidak diperlukan, model ditentukan dalam cara percobaan harus diikat ke instance <code class=\"docutils literal notranslate\"><span class=\"pre\">Apps</span></code> sementara:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.apps.registry</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Apps</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">test_apps</span> <span class=\"o\">=</span> <span class=\"n\">Apps</span><span class=\"p\">([</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">])</span>\n\n        <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n            <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n                <span class=\"n\">apps</span> <span class=\"o\">=</span> <span class=\"n\">test_apps</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.utils.isolate_apps\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.test.utils.</span></span><span class=\"sig-name descname\"><span class=\"pre\">isolate_apps</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">app_labels</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">attr_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">kwarg_name</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.utils.isolate_apps\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Sejak corak ini melibatkan banyak boilerplate, Django menyediakan penghias <a class=\"reference internal\" href=\"#django.test.utils.isolate_apps\" title=\"django.test.utils.isolate_apps\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">isolate_apps()</span></code></a>. Itu digunakan seperti ini:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">isolate_apps</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<aside class=\"admonition-setting-app-label admonition\">\n<p class=\"admonition-title\">Mengatur <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code></p>\n<p>Model ditentukan dalam cara percobaan dengan tidak eksplisit <a class=\"reference internal\" href=\"/id/2.1/ref/models/options/#django.db.models.Options.app_label\" title=\"django.db.models.Options.app_label\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">app_label</span></code></a> secara otomatis diberikan label dari aplikasi dimana kelas percobaan mereka ditempatkan.</p>\n<p>Untuk memastikan model ditentukan dalam konteks instance <a class=\"reference internal\" href=\"#django.test.utils.isolate_apps\" title=\"django.test.utils.isolate_apps\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">isolate_apps()</span></code></a> dengan benar dipasang, anda harus lolos kumpulan <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code> ditargetkan sebagai argumen:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\">tests/app_label/tests.py</figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">isolate_apps</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;other_app_label&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># This model automatically receives app_label=&#39;app_label&#39;</span>\n        <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n\n        <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">OtherAppModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n            <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Meta</span><span class=\"p\">:</span>\n                <span class=\"n\">app_label</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;other_app_label&#39;</span>\n        <span class=\"o\">...</span>\n</code></pre></figure>\n</aside>\n<p>Penghias dapat juga diberlakukan ke kelas-kelas:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">isolate_apps</span>\n\n<span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>Instance <code class=\"docutils literal notranslate\"><span class=\"pre\">Apps</span></code> sementara digunakan untuk mengasingkan pendaftaran model dapat ditarik sebagai sebuah atribut ketika digunakan sebagai kelas penghias dengan menggunakan parameter <code class=\"docutils literal notranslate\"><span class=\"pre\">attr_name</span></code>:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">isolate_apps</span>\n\n<span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">,</span> <span class=\"n\">attr_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;apps&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertIs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;TestModel&#39;</span><span class=\"p\">),</span> <span class=\"n\">TestModel</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Atau sebagai sebuah argumen pada cara percobaan ketika digunakan sebagai cara penghias dengan menggunakan parameter <code class=\"docutils literal notranslate\"><span class=\"pre\">kwarg_name</span></code>:</p>\n<div class=\"code-block\" data-language=\"python\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">isolate_apps</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModelDefinition</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwarg_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;apps&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_model_definition</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">apps</span><span class=\"p\">):</span>\n        <span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n            <span class=\"k\">pass</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertIs</span><span class=\"p\">(</span><span class=\"n\">apps</span><span class=\"o\">.</span><span class=\"n\">get_model</span><span class=\"p\">(</span><span class=\"s1\">&#39;app_label&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;TestModel&#39;</span><span class=\"p\">),</span> <span class=\"n\">TestModel</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>\n</section>","rootId":"unit-tests","toc":[{"title":"Menjalankan satuan percobaan","anchor":"running-the-unit-tests","children":[{"title":"Mulai cepat","anchor":"quickstart","children":[]},{"title":"Menjalankan percobaan menggunakan tox","anchor":"running-tests-using-tox","children":[{"title":"Mencoba versi Python lain dan backend basisdata","anchor":"testing-other-python-versions-and-database-backends","children":[]},{"title":"Menjalankan percobaan JavaScript","anchor":"running-the-javascript-tests","children":[]}]},{"title":"Gunakan modul pengaturan lain","anchor":"using-another-settings-module","children":[]},{"title":"Menjalankan hanya beberapa untuk percobaan","anchor":"running-only-some-of-the-tests","children":[]},{"title":"Menjalankan percobaan Selenium","anchor":"running-the-selenium-tests","children":[]},{"title":"Menjalankan semua percobaan","anchor":"running-all-the-tests","children":[]},{"title":"Cakupan kode","anchor":"code-coverage","children":[]}]},{"title":"Aplikasi bantuan","anchor":"contrib-apps","children":[]},{"title":"Menyelesaikan masalah","anchor":"troubleshooting","children":[{"title":"Banyak percobaan gagal dengan UnicodeEncodeError","anchor":"many-test-failures-with-unicodeencodeerror","children":[]},{"title":"Percobaan hanya gagal di kombinasi","anchor":"tests-that-only-fail-in-combination","children":[]},{"title":"Melihat permintaan SQL berjalan selama percobaan","anchor":"seeing-the-sql-queries-run-during-a-test","children":[]},{"title":"Melihat melacak kembali penuh dari kegagalan percobaan","anchor":"seeing-the-full-traceback-of-a-test-failure","children":[]},{"title":"Tip untuk menulis percobaan","anchor":"tips-for-writing-tests","children":[{"title":"Mengasingkan pendaftaran model","anchor":"isolating-model-registration","children":[]}]}]}],"breadcrumbs":[{"docname":"internals/index","title":"Dalam Django","url":"/id/2.1/internals/"},{"docname":"internals/contributing/index","title":"Membantu untuk Django","url":"/id/2.1/internals/contributing/"},{"docname":"internals/contributing/writing-code/index","title":"Penulisan kode","url":"/id/2.1/internals/contributing/writing-code/"}],"prev":{"docname":"internals/contributing/writing-code/coding-style","title":"Gaya pengkodean","url":"/id/2.1/internals/contributing/writing-code/coding-style/"},"next":{"docname":"internals/contributing/writing-code/submitting-patches","title":"Mengajukan tambalan","url":"/id/2.1/internals/contributing/writing-code/submitting-patches/"},"formats":{"html":"/id/2.1/internals/contributing/writing-code/unit-tests/","markdown":"/id/2.1/internals/contributing/writing-code/unit-tests.md","json":"/id/2.1/internals/contributing/writing-code/unit-tests.json"},"source":"https://github.com/django/django/blob/stable/2.1.x/docs/internals/contributing/writing-code/unit-tests.txt","official":"https://docs.djangoproject.com/id/2.1/internals/contributing/writing-code/unit-tests/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}