{"title":"Enhetstester","version":"6.1","locale":"sv","docname":"internals/contributing/writing-code/unit-tests","url":"/sv/6.1/internals/contributing/writing-code/unit-tests/","canonical":"https://djangodocs.dev/sv/6.1/internals/contributing/writing-code/unit-tests/","summary":"Django levereras med en egen testsvit i katalogen tests i kodbasen. Det är vår policy att se till att alla tester godkänns hela tiden. Vi uppskattar alla bidrag…","html":"<h1>Enhetstester<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 levereras med en egen testsvit i katalogen <code class=\"docutils literal notranslate\"><span class=\"pre\">tests</span></code> i kodbasen. Det är vår policy att se till att alla tester godkänns hela tiden.</p>\n<p>Vi uppskattar alla bidrag till testsviten!</p>\n<p>Django-testerna använder alla den testinfrastruktur som levereras med Django för att testa applikationer. Se <a class=\"reference internal\" href=\"/sv/6.1/topics/testing/overview/\"><span class=\"doc\">Skriva och köra tester</span></a> för en förklaring av hur man skriver nya tester.</p>\n<section id=\"running-the-unit-tests\">\n<span id=\"running-unit-tests\"></span><h2>Kör enhetstesterna<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>Snabbstart<a class=\"heading-anchor\" href=\"#quickstart\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Först, <a class=\"reference external\" href=\"https://github.com/django/django/fork\">fork Django på GitHub</a>.</p>\n<p>För det andra, skapa och aktivera en virtuell miljö. Om du inte är bekant med hur du gör det, läs vår <a class=\"reference internal\" href=\"/sv/6.1/intro/contributing/\"><span class=\"doc\">Bidragshandledning</span></a>.</p>\n<p>Därefter klonar du din fork, installerar några krav och kör testerna:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><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>https://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>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>-e<span class=\"w\"> </span>..\n<span class=\"gp\">$ </span>python<span class=\"w\"> </span>-m<span class=\"w\"> </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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git clone https://github.com/YourGitHubName/django.git django-repo\n<span class=\"gp\">...\\&gt;</span> <span class=\"k\">cd</span> django-repo\\tests\n<span class=\"gp\">...\\&gt;</span> py -m pip install -e ..\n<span class=\"gp\">...\\&gt;</span> py -m pip install -r requirements\\py3.txt\n<span class=\"gp\">...\\&gt;</span> runtests.py \n</code></pre></div></div></div>\n<p>För att installera kraven krävs troligen några operativsystemspaket som inte finns installerade på din dator. Du kan vanligtvis ta reda på vilket paket som ska installeras genom att göra en webbsökning efter den sista raden eller så i felmeddelandet. Försök att lägga till ditt operativsystem i sökfrågan om det behövs.</p>\n<p>If you have trouble installing an optional test dependency, you can skip that\ndependency locally. For example, if installing <code class=\"docutils literal notranslate\"><span class=\"pre\">pylibmc</span></code> fails, comment out\nits line in <code class=\"docutils literal notranslate\"><span class=\"pre\">requirements/py3.txt</span></code> and continue with <code class=\"docutils literal notranslate\"><span class=\"pre\">./runtests.py</span></code>.\nTests that require <code class=\"docutils literal notranslate\"><span class=\"pre\">pylibmc</span></code> will be skipped automatically. See\n<a class=\"reference internal\" href=\"#running-unit-tests-dependencies\"><span class=\"std std-ref\">Kör alla tester</span></a> for details on installing the optional\ntest dependencies.</p>\n<p>För att köra testerna krävs en inställningsmodul för Django som definierar vilka databaser som ska användas. För att hjälpa dig att komma igång tillhandahåller och använder Django en exempelinställningsmodul som använder SQLite-databasen. Se <a class=\"reference internal\" href=\"#running-unit-tests-settings\"><span class=\"std std-ref\">Använda en annan settings-modul</span></a> för att lära dig hur du använder en annan inställningsmodul för att köra testerna med en annan databas.</p>\n<p>Har du problem? Se <a class=\"reference internal\" href=\"#troubleshooting-unit-tests\"><span class=\"std std-ref\">Felsökning</span></a> för några vanliga problem.</p>\n</section>\n<section id=\"running-tests-using-tox\">\n<h3>Kör tester med hjälp av <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.wiki/\">Tox</a> är ett verktyg för att köra tester i olika virtuella miljöer. Django innehåller en grundläggande <code class=\"docutils literal notranslate\"><span class=\"pre\">tox.ini</span></code> som automatiserar vissa kontroller som vår byggserver utför på pull-förfrågningar. För att köra enhetstesterna och andra kontroller (som <a class=\"reference internal\" href=\"/sv/6.1/internals/contributing/writing-code/coding-style/#coding-style-imports\"><span class=\"std std-ref\">import sorting</span></a>, <a class=\"reference internal\" href=\"/sv/6.1/internals/contributing/writing-documentation/#documentation-spelling-check\"><span class=\"std std-ref\">documentation spelling checker</span></a>, och <a class=\"reference internal\" href=\"/sv/6.1/internals/contributing/writing-code/coding-style/#coding-style-python\"><span class=\"std std-ref\">code formatting</span></a>), installera och kör kommandot <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code> från vilken plats som helst i Djangos källträd:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><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>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>tox\n<span class=\"gp\">$ </span>tox\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install tox\n<span class=\"gp\">...\\&gt;</span> tox\n</code></pre></div></div></div>\n<p>By default, <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code> runs the test suite with the bundled test settings file for\nSQLite, <code class=\"docutils literal notranslate\"><span class=\"pre\">black</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">blacken-docs</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">flake8</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">isort</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">lint-docs</span></code>,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">zizmor</span></code>, and the documentation spelling checker. In addition to the system\ndependencies noted elsewhere in this documentation, the command <code class=\"docutils literal notranslate\"><span class=\"pre\">python3</span></code>\nmust be on your path and linked to the appropriate version of Python. A list of\ndefault environments can be seen as follows:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-unix-label\">Linux / macOS</p><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\">black</span>\n<span class=\"go\">blacken-docs</span>\n<span class=\"go\">flake8&gt;=3.7.0</span>\n<span class=\"go\">docs</span>\n<span class=\"go\">isort&gt;=7.0.0</span>\n<span class=\"go\">lint-docs</span>\n<span class=\"go\">zizmor&gt;=1.19.0</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> tox -l\n<span class=\"go\">py3</span>\n<span class=\"go\">black</span>\n<span class=\"go\">blacken-docs</span>\n<span class=\"gp\">flake8&gt;</span>=3.7.0\n<span class=\"go\">docs</span>\n<span class=\"gp\">isort&gt;</span>=7.0.0\n<span class=\"go\">lint-docs</span>\n<span class=\"gp\">zizmor&gt;</span>=1.19.0\n</code></pre></div></div></div>\n<section id=\"testing-other-python-versions-and-database-backends\">\n<h4>Testning av andra Python-versioner och databasbackends<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>In addition to the default environments, <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code> supports running unit tests\nfor other versions of Python and other database backends. Since Django’s test\nsuite doesn’t bundle a settings file for database backends other than SQLite,\nhowever, you must <a class=\"reference internal\" href=\"#running-unit-tests-settings\"><span class=\"std std-ref\">create and provide your own test settings</span></a>. For example, to run the tests on Python 3.12\nusing PostgreSQL:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-unix-label\">Linux / macOS</p><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>py312-postgres<span class=\"w\"> </span>--<span class=\"w\"> </span>--settings<span class=\"o\">=</span>my_postgres_settings\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> tox -e py312-postgres -- --settings=my_postgres_settings\n</code></pre></div></div></div>\n<p>This command sets up a Python 3.12 virtual environment, installs Django’s\ntest suite dependencies (including those for PostgreSQL), and calls\n<code class=\"docutils literal notranslate\"><span class=\"pre\">runtests.py</span></code> with the supplied arguments (in this case,\n<code class=\"docutils literal notranslate\"><span class=\"pre\">--settings=my_postgres_settings</span></code>).</p>\n<p>I resten av denna dokumentation visas kommandon för att köra tester utan <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code>, men alla alternativ som skickas till <code class=\"docutils literal notranslate\"><span class=\"pre\">runtests.py</span></code> kan också skickas till <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code> genom att prefixera argumentlistan med <code class=\"docutils literal notranslate\"><span class=\"pre\">--</span></code>, enligt ovan.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">Tox</span></code> respekterar även miljövariabeln <span class=\"target\" id=\"index-6\"></span><a class=\"reference internal\" href=\"/sv/6.1/topics/settings/#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a>, om den är inställd. Följande är till exempel likvärdigt med kommandot ovan:</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>py312-postgres\n</code></pre></div>\n<p>Windows-användare bör använda:</p>\n<div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows code\"><code><span class=\"gp\">...\\&gt;</span> <span class=\"k\">set</span> <span class=\"nv\">DJANGO_SETTINGS_MODULE</span><span class=\"p\">=</span>my_postgres_settings\n<span class=\"gp\">...\\&gt;</span> tox -e py312-postgres\n</code></pre></div>\n</section>\n<section id=\"running-the-javascript-tests\">\n<h4>Körning av JavaScript-testerna<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 innehåller en uppsättning <a class=\"reference internal\" href=\"/sv/6.1/internals/contributing/writing-code/javascript/#javascript-tests\"><span class=\"std std-ref\">JavaScript-enhetstester</span></a> för funktioner i vissa Contrib-appar. JavaScript-testerna körs inte som standard med <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code> eftersom de kräver att <code class=\"docutils literal notranslate\"><span class=\"pre\">Node.js</span></code> installeras och inte är nödvändiga för de flesta korrigeringar. För att köra JavaScript-testerna med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">tox</span></code>:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> tox -e javascript\n</code></pre></div></div></div>\n<p>Detta kommando kör <code class=\"docutils literal notranslate\"><span class=\"pre\">npm</span> <span class=\"pre\">install</span></code> för att säkerställa att testkraven är uppdaterade och kör sedan <code class=\"docutils literal notranslate\"><span class=\"pre\">npm</span> <span class=\"pre\">test</span></code>.</p>\n</section>\n</section>\n<section id=\"running-tests-using-django-docker-box\">\n<span id=\"running-tests-docker-box\"></span><h3>Kör tester med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">django-docker-box</span></code><a class=\"heading-anchor\" href=\"#running-tests-using-django-docker-box\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>med <a class=\"reference external\" href=\"https://github.com/django/django-docker-box/\">django-docker-box</a> kan du köra Djangos testsvit över alla databaser och pythonversioner som stöds. Se projektsidan <a class=\"reference external\" href=\"https://github.com/django/django-docker-box/\">django-docker-box</a> för installations- och användningsinstruktioner.</p>\n</section>\n<section id=\"using-another-settings-module\">\n<span id=\"running-unit-tests-settings\"></span><h3>Använda en annan <code class=\"docutils literal notranslate\"><span class=\"pre\">settings</span></code>-modul<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>Den medföljande inställningsmodulen (<code class=\"docutils literal notranslate\"><span class=\"pre\">tests/test_sqlite.py</span></code>) gör att du kan köra testsviten med SQLite. Om du vill köra testerna med en annan databas måste du definiera din egen inställningsfil. Vissa tester, t.ex. de för <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.postgres</span></code>, är specifika för en viss databasbackend och kommer att hoppas över om de körs med en annan backend. Vissa tester hoppas över eller förväntade misslyckanden på en viss databas backend (se <code class=\"docutils literal notranslate\"><span class=\"pre\">DatabaseFeatures.django_test_skips</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">DatabaseFeatures.django_test_expected_failures</span></code> på varje backend).</p>\n<p>Om du vill köra testerna med olika inställningar måste du se till att modulen finns på din <span class=\"target\" id=\"index-7\"></span><a class=\"reference external\" href=\"https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH\" title=\"(in Python v3.14)\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">PYTHONPATH</span></code></a> och skicka modulen med <code class=\"docutils literal notranslate\"><span class=\"pre\">--settings</span></code>.</p>\n<p>Inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a> i en modul för testinställningar måste definiera två databaser:</p>\n<ul class=\"simple\">\n<li><p>En <code class=\"docutils literal notranslate\"><span class=\"pre\">standard</span></code> databas. Denna databas bör använda den backend som du vill använda för primär testning.</p></li>\n<li><p>En databas med aliaset <code class=\"docutils literal notranslate\"><span class=\"pre\">other</span></code>. Databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">other</span></code> används för att testa att frågor kan riktas till olika databaser. Den här databasen bör använda samma backend som <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> och den måste ha ett annat namn.</p></li>\n</ul>\n<p>Om du använder en backend som inte är SQLite måste du ange andra uppgifter för varje databas:</p>\n<ul class=\"simple\">\n<li><p>Alternativet <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-USER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USER</span></code></a> måste ange ett befintligt användarkonto för databasen. Den användaren behöver behörighet att köra <code class=\"docutils literal notranslate\"><span class=\"pre\">CREATE</span> <span class=\"pre\">DATABASE</span></code> så att testdatabasen kan skapas.</p></li>\n<li><p>Alternativet <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-PASSWORD\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">PASSWORD</span></code></a> måste innehålla lösenordet för den <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-USER\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">USER</span></code></a> som har angetts.</p></li>\n</ul>\n<p>Testdatabaser får sina namn genom att lägga till <code class=\"docutils literal notranslate\"><span class=\"pre\">test_</span></code> till värdet i inställningarna <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">NAME</span></code></a> för de databaser som definieras i <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATABASES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASES</span></code></a>. Dessa testdatabaser raderas när testerna är avslutade.</p>\n<p>Du måste också se till att din databas använder UTF-8 som standardteckensats. Om din databasserver inte använder UTF-8 som standardteckensats måste du lägga till ett värde för <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-TEST_CHARSET\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CHARSET</span></code></a> i testinställningsordlistan för den aktuella databasen.</p>\n</section>\n<section id=\"running-only-some-of-the-tests\">\n<span id=\"runtests-specifying-labels\"></span><h3>Kör bara några av testerna<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>Djangos hela testsvit tar en stund att köra, och att köra varje enskilt test kan vara överflödigt om du till exempel just har lagt till ett test i Django som du vill köra snabbt utan att köra allt annat. Du kan köra en delmängd av enhetstesterna genom att lägga till namnen på testmodulerna till <code class=\"docutils literal notranslate\"><span class=\"pre\">runtests.py</span></code> på kommandoraden.</p>\n<p>Om du t.ex. bara vill köra tester för generiska relationer och internationalisering, skriv:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-5-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py --settings=path.to.settings generic_relations i18n\n</code></pre></div></div></div>\n<p>Hur får du reda på namnen på enskilda tester? Titta i <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/</span></code> - varje katalognamn där är namnet på ett test.</p>\n<p>Om du bara vill köra en viss klass av tester kan du ange en lista med sökvägar till enskilda testklasser. Om du t.ex. vill köra <code class=\"docutils literal notranslate\"><span class=\"pre\">TranslationTests</span></code> för modulen <code class=\"docutils literal notranslate\"><span class=\"pre\">i18n</span></code> skriver du :</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py --settings=path.to.settings i18n.tests.TranslationTests\n</code></pre></div></div></div>\n<p>Utöver detta kan du ange en enskild testmetod på följande sätt:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-7-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-7-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py --settings=path.to.settings i18n.tests.TranslationTests.test_lazy_objects\n</code></pre></div></div></div>\n<p>Du kan köra tester som startar vid en angiven modul på högsta nivån med alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">--start-at</span></code>. Till exempel</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-8-unix-label\">Linux / macOS</p><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>--start-at<span class=\"o\">=</span>wsgi\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-8-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py --start-at=wsgi\n</code></pre></div></div></div>\n<p>Du kan också köra tester som startar efter en angiven modul på högsta nivån med alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">--start-after</span></code>. Till exempel:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-9-unix-label\">Linux / macOS</p><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>--start-after<span class=\"o\">=</span>wsgi\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-9-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py --start-after=wsgi\n</code></pre></div></div></div>\n<p>Observera att alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">--reverse</span></code> inte har någon inverkan på alternativen <code class=\"docutils literal notranslate\"><span class=\"pre\">--start-at</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">--start-after</span></code>. Dessutom kan dessa alternativ inte användas med testetiketter.</p>\n</section>\n<section id=\"running-the-selenium-tests\">\n<span id=\"running-selenium-tests\"></span><h3>Kör Selenium-testerna<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>Vissa tester kräver Selenium och en webbläsare. För att köra dessa tester måste du installera paketet <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/selenium/\">selenium</a> och köra testerna med alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">--selenium=&lt;BROWSERS&gt;</span></code>. Till exempel om du har Firefox och Google Chrome installerade:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-10-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-10-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py --selenium=firefox,chrome\n</code></pre></div></div></div>\n<p>Se paketet <a class=\"reference external\" href=\"https://github.com/SeleniumHQ/selenium/tree/trunk/py/selenium/webdriver\">selenium.webdriver</a> för en lista över tillgängliga webbläsare.</p>\n<p>Om du anger <code class=\"docutils literal notranslate\"><span class=\"pre\">--selenium</span></code> ställs <code class=\"docutils literal notranslate\"><span class=\"pre\">--tags=selenium</span></code> automatiskt in så att endast de tester som kräver selenium körs.</p>\n<p>Vissa webbläsare (t.ex. Chrome eller Firefox) stöder headless-testning, som kan vara snabbare och stabilare. Lägg till alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">--headless</span></code> för att aktivera detta läge.</p>\n<section id=\"screenshot-tests\">\n<span id=\"id1\"></span><h4>Skärmdump tester<a class=\"heading-anchor\" href=\"#screenshot-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>För att testa ändringar i administratörsgränssnittet kan seleniumtesterna köras med alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">--screenshots</span></code> aktiverat. Skärmdumpar kommer att sparas i katalogen <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/screenshots/</span></code>.</p>\n<p>För att definiera när skärmdumpar ska tas under ett seleniumtest måste testklassen använda dekoratorn <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;django.test.selenium.screenshot_cases</span></code> med en lista över skärmdumpstyper som stöds (<code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;desktop_size&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;mobile_size&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;small_screen_size&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;rtl&quot;</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;dark&quot;</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;high_contrast&quot;</span></code>). Den kan sedan anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">self.take_screenshot(&quot;unique-screenshot-name&quot;)</span></code> vid önskad punkt för att generera skärmdumparna. Till exempel:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test.selenium</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SeleniumTestCase</span><span class=\"p\">,</span> <span class=\"n\">screenshot_cases</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">reverse</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SeleniumTests</span><span class=\"p\">(</span><span class=\"n\">SeleniumTestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@screenshot_cases</span><span class=\"p\">([</span><span class=\"s2\">&quot;desktop_size&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;mobile_size&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;rtl&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;dark&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;high_contrast&quot;</span><span class=\"p\">])</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login_button_centered</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">live_server_url</span> <span class=\"o\">+</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s2\">&quot;admin:login&quot;</span><span class=\"p\">))</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">take_screenshot</span><span class=\"p\">(</span><span class=\"s2\">&quot;login&quot;</span><span class=\"p\">)</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>Detta genererar flera skärmdumpar av inloggningssidan - en för en datorskärm, en för en mobilskärm, en för höger till vänster-språk på datorn, en för mörkt läge på datorn och en för högkontrastläge på datorn när du använder Chrome.</p>\n</section>\n</section>\n<section id=\"running-all-the-tests\">\n<span id=\"running-unit-tests-dependencies\"></span><h3>Kör alla tester<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>Om du vill köra hela testsviten måste du installera ett antal beroenden:</p>\n<ul class=\"simple\">\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/aiosmtpd/\">aiosmtpd</a> 1.4.5+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/argon2-cffi/\">argon2-cffi</a> 23.1.0+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/asgiref/\">asgiref</a> 3.9.1+ (required)</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/bcrypt/\">bcrypt</a> 4.1.1+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/colorama/\">colorama</a> 0.4.6+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/docutils/\">docutils</a> 0.22+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/geoip2/\">geoip2</a> 4.8.0+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/Jinja2/\">Jinja2</a> 2.11+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/numpy/\">numpy</a> 1.26.0+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/Pillow/\">Pillow</a> 10.1.0+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/PyYAML/\">PyYAML</a> 6.0.2+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/pywatchman/\">pywatchman</a></p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/redis/\">redis</a> 5.1.0+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/pymemcache/\">pymemcache</a>, plus en <a class=\"reference external\" href=\"https://memcached.org/\">stödd Python-bindning</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://www.gnu.org/software/gettext/manual/gettext.html\">gettext</a>\n(<a class=\"reference internal\" href=\"/sv/6.1/topics/i18n/translation/#gettext-on-windows\"><span class=\"std std-ref\">gettext på Windows</span></a>)</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/selenium/\">selenium</a> 4.23.0+</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/sqlparse/\">sqlparse</a> 0.5.0+ (required)</p></li>\n<li><p><a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/tblib/\">tblib</a> 3.0.0+</p></li>\n</ul>\n<p>Du kan hitta dessa beroenden i <a class=\"reference external\" href=\"https://pip.pypa.io/en/latest/user_guide/#requirements-files\">pip requirements files</a> i katalogen <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/requirements</span></code> i Djangos källträd och installera dem på följande sätt:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-11-unix-label\">Linux / macOS</p><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>python<span class=\"w\"> </span>-m<span class=\"w\"> </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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-11-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install -r tests\\requirements\\py3.txt\n</code></pre></div></div></div>\n<p>Om du stöter på ett fel under installationen kan det hända att ditt system saknar ett beroende för ett eller flera av Python-paketen. Läs dokumentationen för det paket som inte fungerar eller sök på webben efter det felmeddelande som du stöter på.</p>\n<p>Du kan också installera valfri(a) databasadapter(s) med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">oracle.txt</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">mysql.txt</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">postgres.txt</span></code>.</p>\n<p>Om du vill testa backends för memcached eller Redis cache måste du också definiera en <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-CACHES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CACHES</span></code></a>-inställning som pekar på din memcached- respektive Redis-instans.</p>\n<p>För att köra GeoDjango-testerna måste du <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/gis/install/\"><span class=\"doc\">konfigurera en spatial databas och installera Geospatial-biblioteken</span></a>.</p>\n<p>Var och en av dessa beroenden är valfria. Om du saknar något av dem kommer de tillhörande testerna att hoppas över.</p>\n<p>För att köra några av de automatiska laddningstesterna måste du installera tjänsten <a class=\"reference external\" href=\"https://facebook.github.io/watchman/\">Watchman</a>.</p>\n</section>\n<section id=\"code-coverage\">\n<h3>Kodtäckning<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>Bidragsgivare uppmuntras att köra täckning på testsviten för att identifiera områden som behöver ytterligare tester. Installation och användning av täckningsverktyget beskrivs i <a class=\"reference internal\" href=\"/sv/6.1/topics/testing/advanced/#topics-testing-code-coverage\"><span class=\"std std-ref\">testning code coverage</span></a>.</p>\n<p>För att köra täckning på Djangos testsvit med standardtestinställningarna:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-12-unix-label\">Linux / macOS</p><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\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-12-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> coverage run runtests.py --settings=test_sqlite\n</code></pre></div></div></div>\n<p>Efter att ha kört täckning, kombinera all täckningsstatistik genom att köra:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-13-unix-label\">Linux / macOS</p><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>combine\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-13-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> coverage combine\n</code></pre></div></div></div>\n<p>Efter det genererar du html-rapporten genom att köra:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-14-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-14-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> coverage html\n</code></pre></div></div></div>\n<p>När du kör täckning för Django-testerna definierar den medföljande inställningsfilen <code class=\"docutils literal notranslate\"><span class=\"pre\">.coveragerc</span></code> <code class=\"docutils literal notranslate\"><span class=\"pre\">coverage_html</span></code> som utdatakatalog för rapporten och utesluter även flera kataloger som inte är relevanta för resultaten (testkod eller extern kod som ingår i Django).</p>\n</section>\n<section id=\"code-coverage-on-pull-requests\">\n<span id=\"id2\"></span><h3>Code coverage on pull requests<a class=\"heading-anchor\" href=\"#code-coverage-on-pull-requests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django’s continuous integration (CI) system automatically runs code coverage\nanalysis on pull requests and posts a comment with a diff coverage report. This\nhelps reviewers see which lines in the changed code are covered by tests.</p>\n<p><strong>What the coverage report shows:</strong></p>\n<p>The coverage report posted on pull requests uses <a class=\"reference external\" href=\"https://github.com/Bachmann1234/diff_cover\">diff-cover</a> to analyze only\nthe lines that were changed or added in the PR. It shows:</p>\n<ul class=\"simple\">\n<li><p>Lines that are covered by tests (✓)</p></li>\n<li><p>Lines that are not covered by tests (✗)</p></li>\n<li><p>Lines that cannot be covered (e.g., comments, blank lines)</p></li>\n</ul>\n<p><strong>Important limitations:</strong></p>\n<p>When reviewing coverage reports on pull requests, keep these limitations in\nmind:</p>\n<ul class=\"simple\">\n<li><p><strong>Database-specific code:</strong> The CI coverage job runs tests using PostgreSQL\non Ubuntu. Code paths specific to other databases (SQLite, MySQL, Oracle)\nwill appear as ”not covered” even if database-specific tests exist. This is\nexpected and acceptable.</p></li>\n<li><p><strong>Platform-specific code:</strong> Similarly, code that only runs on certain\noperating systems (Windows, macOS) will appear as not covered when run on\nUbuntu.</p></li>\n<li><p><strong>Coverage doesn’t equal quality:</strong> A line being ”covered” only means it was\nexecuted during tests. It doesn’t guarantee the line is well-tested or that\nall edge cases are handled. During review, assess test quality beyond just\ncoverage numbers.</p></li>\n</ul>\n<p>Missing coverage should be considered a warning rather than a blocker and\nshould be evaluated in context.</p>\n</section>\n</section>\n<section id=\"contrib-apps\">\n<span id=\"id3\"></span><h2>Bidragande appar<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>Tester för Contrib-appar finns i katalogen <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.1.x/tests/\">tests/</a>, vanligtvis under <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;app_name&gt;_tests</span></code>. Till exempel finns tester för <code class=\"docutils literal notranslate\"><span class=\"pre\">contrib.auth</span></code> i <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.1.x/tests/auth_tests\">tests/auth_tests</a>.</p>\n</section>\n<section id=\"troubleshooting\">\n<span id=\"troubleshooting-unit-tests\"></span><h2>Felsökning<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=\"test-suite-hangs-or-shows-failures-on-main-branch\">\n<h3>Testsviten hänger sig eller visar fel på <code class=\"docutils literal notranslate\"><span class=\"pre\">main</span></code>-grenen<a class=\"heading-anchor\" href=\"#test-suite-hangs-or-shows-failures-on-main-branch\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Se till att du har den senaste punktversionen av en <a class=\"reference internal\" href=\"/sv/6.1/faq/install/#faq-python-version-support\"><span class=\"std std-ref\">stödd Python-version</span></a>, eftersom det ofta finns buggar i tidigare versioner som kan leda till att testsviten misslyckas eller hänger sig.</p>\n<p>På <strong>macOS</strong> (High Sierra och nyare versioner) kan du se detta meddelande loggat, varefter testerna hänger sig:</p>\n<div class=\"code-block\" data-language=\"pytb\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Pytb</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=\"Pytb code\"><code><span class=\"x\">objc[42074]: +[__NSPlaceholderDate initialize] may have been in progress in</span>\n<span class=\"x\">another thread when fork() was called.</span>\n</code></pre></div>\n<p>För att undvika detta kan du t.ex. ange miljövariabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">OBJC_DISABLE_INITIALIZE_FORK_SAFETY</span></code>:</p>\n<div class=\"code-block\" data-language=\"shell\"><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=\"w\"> </span><span class=\"nv\">OBJC_DISABLE_INITIALIZE_FORK_SAFETY</span><span class=\"o\">=</span>YES<span class=\"w\"> </span>./runtests.py\n</code></pre></div>\n<p>Eller lägg till <code class=\"docutils literal notranslate\"><span class=\"pre\">export</span> <span class=\"pre\">OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES</span></code> i startfilen för ditt skal (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">~/.profile</span></code>).</p>\n</section>\n<section id=\"many-test-failures-with-unicodeencodeerror\">\n<h3>Många misslyckade tester med <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>Om paketet <code class=\"docutils literal notranslate\"><span class=\"pre\">locales</span></code> inte är installerat kommer vissa tester att misslyckas med <code class=\"docutils literal notranslate\"><span class=\"pre\">UnicodeEncodeError</span></code>.</p>\n<p>Du kan lösa detta på Debian-baserade system genom att t.ex. köra:</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>Du kan lösa detta för macOS-system genom att konfigurera ditt shells locale:</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>Kör kommandot <code class=\"docutils literal notranslate\"><span class=\"pre\">locale</span></code> för att bekräfta ändringen. Lägg eventuellt till dessa exportkommandon i startfilen för ditt skal (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">~/.bashrc</span></code> för Bash) så att du slipper skriva in dem igen.</p>\n</section>\n<section id=\"tests-that-only-fail-in-combination\">\n<h3>Tester som bara misslyckas i kombination<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>Om ett test godkänns när det körs isolerat men misslyckas i hela sviten har vi några verktyg som hjälper till att analysera problemet.</p>\n<p>Alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">--bisect</span></code> i <code class=\"docutils literal notranslate\"><span class=\"pre\">runtests.py</span></code> kör det misslyckade testet samtidigt som testuppsättningen som det körs tillsammans med halveras vid varje iteration, vilket ofta gör det möjligt att identifiera ett litet antal tester som kan vara relaterade till felet.</p>\n<p>Anta till exempel att det misslyckade testet som fungerar på egen hand är <code class=\"docutils literal notranslate\"><span class=\"pre\">ModelTest.test_eq</span></code>, då använder du:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-15-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-15-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py --bisect basic.tests.ModelTest.test_eq\n</code></pre></div></div></div>\n<p>kommer att försöka hitta ett test som stör det givna testet. Först körs testet med den första halvan av testsviten. Om ett fel uppstår delas den första halvan av testsviten upp i två grupper och varje grupp körs sedan med det angivna testet. Om det inte uppstår något fel med den första halvan av testsviten körs den andra halvan av testsviten med det angivna testet och delas upp på lämpligt sätt enligt beskrivningen ovan. Processen upprepas tills antalet misslyckade tester har minimerats.</p>\n<p>Alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">--pair</span></code> kör det givna testet tillsammans med alla andra tester från sviten, så att du kan kontrollera om ett annat test har bieffekter som orsakar felet. Så här gör du:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-16-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-16-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py --pair basic.tests.ModelTest.test_eq\n</code></pre></div></div></div>\n<p>kommer att para ihop <code class=\"docutils literal notranslate\"><span class=\"pre\">test_eq</span></code> med varje testetikett.</p>\n<p>Med både <code class=\"docutils literal notranslate\"><span class=\"pre\">--bisect</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">--pair</span></code>, om du redan misstänker vilka fall som kan vara ansvariga för felet, kan du begränsa tester som ska korsanalyseras genom att <a class=\"reference internal\" href=\"#runtests-specifying-labels\"><span class=\"std std-ref\">specificera ytterligare testetiketter</span></a> efter den första:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-17-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-17-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py --pair basic.tests.ModelTest.test_eq queries transactions\n</code></pre></div></div></div>\n<p>Du kan också prova att köra en uppsättning tester i slumpmässig eller omvänd ordning med hjälp av alternativen <code class=\"docutils literal notranslate\"><span class=\"pre\">--shuffle</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">--reverse</span></code>. Detta kan hjälpa till att verifiera att körning av tester i en annan ordning inte orsakar några problem:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-18-unix-label\">Linux / macOS</p><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>--shuffle\n<span class=\"gp\">$ </span>./runtests.py<span class=\"w\"> </span>basic<span class=\"w\"> </span>--reverse\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-18-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py basic --shuffle\n<span class=\"gp\">...\\&gt;</span> runtests.py basic --reverse\n</code></pre></div></div></div>\n</section>\n<section id=\"seeing-the-sql-queries-run-during-a-test\">\n<h3>Se de SQL-frågor som körs under ett test<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>Om du vill undersöka den SQL som körs i misslyckade tester kan du aktivera <a class=\"reference internal\" href=\"/sv/6.1/ref/logging/#django-db-logger\"><span class=\"std std-ref\">SQL logging</span></a> med alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">--debug-sql</span></code>. Om du kombinerar detta med <code class=\"docutils literal notranslate\"><span class=\"pre\">--verbosity=2</span></code> kommer alla SQL-frågor att skrivas ut:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-19-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-19-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py basic --debug-sql\n</code></pre></div></div></div>\n</section>\n<section id=\"seeing-the-full-traceback-of-a-test-failure\">\n<h3>Se den fullständiga spårningen av ett testfel<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>Som standard körs testerna parallellt med en process per kärna. När testerna körs parallellt kommer du dock bara att se en avkortad spårning för eventuella testfel. Du kan justera detta beteende med alternativet <code class=\"docutils literal notranslate\"><span class=\"pre\">--parallel</span></code>:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-20-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-20-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py basic --parallel=1\n</code></pre></div></div></div>\n<p>Du kan också använda miljövariabeln <span class=\"target\" id=\"index-8\"></span><a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#envvar-DJANGO_TEST_PROCESSES\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_TEST_PROCESSES</span></code></a> för detta ändamål.</p>\n</section>\n</section>\n<section id=\"tips-for-writing-tests\">\n<h2>Tips för att skriva tester<a class=\"heading-anchor\" href=\"#tips-for-writing-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"isolating-model-registration\">\n<h3>Isolering av modellregistrering<a class=\"heading-anchor\" href=\"#isolating-model-registration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För att undvika att förorena det globala <a class=\"reference internal\" href=\"/sv/6.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>-registret och förhindra onödigt skapande av tabeller, bör modeller som definieras i en testmetod vara bundna till en tillfällig <code class=\"docutils literal notranslate\"><span class=\"pre\">Apps</span></code>-instans. För att göra detta, använd <a class=\"reference internal\" href=\"/sv/6.1/topics/testing/tools/#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> dekoratorn:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code 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\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=\"s2\">&quot;app_label&quot;</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\n        <span class=\"o\">...</span>\n</code></pre></div>\n<aside class=\"admonition-setting-app-label admonition\">\n<p class=\"admonition-title\">Inställning av <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code></p>\n<p>Modeller som definieras i en testmetod utan någon explicit <a class=\"reference internal\" href=\"/sv/6.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> tilldelas automatiskt etiketten för den app där deras testklass finns.</p>\n<p>För att säkerställa att de modeller som definieras inom ramen för <a class=\"reference internal\" href=\"/sv/6.1/topics/testing/tools/#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>-instanser är korrekt installerade, bör du skicka uppsättningen av riktade <code class=\"docutils literal notranslate\"><span class=\"pre\">app_label</span></code> som argument:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">tester/app_label/tester.py</span></code></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\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=\"s2\">&quot;app_label&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;other_app_label&quot;</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=\"s2\">&quot;other_app_label&quot;</span>\n\n        <span class=\"o\">...</span>\n</code></pre></figure>\n</aside>\n</section>\n</section>","rootId":"unit-tests","toc":[{"title":"Kör enhetstesterna","anchor":"running-the-unit-tests","children":[{"title":"Snabbstart","anchor":"quickstart","children":[]},{"title":"Kör tester med hjälp av tox","anchor":"running-tests-using-tox","children":[{"title":"Testning av andra Python-versioner och databasbackends","anchor":"testing-other-python-versions-and-database-backends","children":[]},{"title":"Körning av JavaScript-testerna","anchor":"running-the-javascript-tests","children":[]}]},{"title":"Kör tester med hjälp av django-docker-box","anchor":"running-tests-using-django-docker-box","children":[]},{"title":"Använda en annan settings-modul","anchor":"using-another-settings-module","children":[]},{"title":"Kör bara några av testerna","anchor":"running-only-some-of-the-tests","children":[]},{"title":"Kör Selenium-testerna","anchor":"running-the-selenium-tests","children":[{"title":"Skärmdump tester","anchor":"screenshot-tests","children":[]}]},{"title":"Kör alla tester","anchor":"running-all-the-tests","children":[]},{"title":"Kodtäckning","anchor":"code-coverage","children":[]},{"title":"Code coverage on pull requests","anchor":"code-coverage-on-pull-requests","children":[]}]},{"title":"Bidragande appar","anchor":"contrib-apps","children":[]},{"title":"Felsökning","anchor":"troubleshooting","children":[{"title":"Testsviten hänger sig eller visar fel på main-grenen","anchor":"test-suite-hangs-or-shows-failures-on-main-branch","children":[]},{"title":"Många misslyckade tester med UnicodeEncodeError","anchor":"many-test-failures-with-unicodeencodeerror","children":[]},{"title":"Tester som bara misslyckas i kombination","anchor":"tests-that-only-fail-in-combination","children":[]},{"title":"Se de SQL-frågor som körs under ett test","anchor":"seeing-the-sql-queries-run-during-a-test","children":[]},{"title":"Se den fullständiga spårningen av ett testfel","anchor":"seeing-the-full-traceback-of-a-test-failure","children":[]}]},{"title":"Tips för att skriva tester","anchor":"tips-for-writing-tests","children":[{"title":"Isolering av modellregistrering","anchor":"isolating-model-registration","children":[]}]}],"breadcrumbs":[{"docname":"internals/index","title":"Djangos interna funktioner","url":"/sv/6.1/internals/"},{"docname":"internals/contributing/index","title":"Att bidra till Django","url":"/sv/6.1/internals/contributing/"},{"docname":"internals/contributing/writing-code/index","title":"Bidra med kod","url":"/sv/6.1/internals/contributing/writing-code/"}],"prev":{"docname":"internals/contributing/writing-code/submitting-patches","title":"Inlämning av bidrag","url":"/sv/6.1/internals/contributing/writing-code/submitting-patches/"},"next":{"docname":"internals/contributing/writing-code/working-with-git","title":"Arbeta med Git och GitHub","url":"/sv/6.1/internals/contributing/writing-code/working-with-git/"},"formats":{"html":"/sv/6.1/internals/contributing/writing-code/unit-tests/","markdown":"/sv/6.1/internals/contributing/writing-code/unit-tests.md","json":"/sv/6.1/internals/contributing/writing-code/unit-tests.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/internals/contributing/writing-code/unit-tests.txt","official":"https://docs.djangoproject.com/sv/6.1/internals/contributing/writing-code/unit-tests/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}