{"title":"Testverktyg","version":"6.1","locale":"sv","docname":"topics/testing/tools","url":"/sv/6.1/topics/testing/tools/","canonical":"https://djangodocs.dev/sv/6.1/topics/testing/tools/","summary":"Django tillhandahåller en liten uppsättning verktyg som är användbara när du skriver tester. Testklienten Link to this heading # Testklienten är en Python-klass som…","html":"<h1>Testverktyg<a class=\"heading-anchor\" href=\"#testing-tools\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django tillhandahåller en liten uppsättning verktyg som är användbara när du skriver tester.</p>\n<section id=\"the-test-client\">\n<span id=\"test-client\"></span><h2>Testklienten<a class=\"heading-anchor\" href=\"#the-test-client\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Testklienten är en Python-klass som fungerar som en dummy-webbläsare, så att du kan testa dina vyer och interagera med din Django-drivna applikation programmatiskt.</p>\n<p>Några av de saker du kan göra med testklienten är följande:</p>\n<ul class=\"simple\">\n<li><p>Simulera GET- och POST-begäranden på en URL och observera svaret - allt från HTTP på låg nivå (resultathuvuden och statuskoder) till sidinnehåll.</p></li>\n<li><p>Se kedjan av omdirigeringar (om det finns några) och kontrollera webbadressen och statuskoden i varje steg.</p></li>\n<li><p>Testa att en given begäran återges av en given Django-mall, med en mallkontext som innehåller vissa värden.</p></li>\n</ul>\n<p>Observera att testklienten inte är avsedd att ersätta <a class=\"reference external\" href=\"https://www.selenium.dev/\">Selenium</a> eller andra ramverk ”i webbläsaren”. Djangos testklient har ett annat fokus. Kort och gott:</p>\n<ul class=\"simple\">\n<li><p>Använd Djangos testklient för att fastställa att rätt mall återges och att mallen får rätt kontextdata.</p></li>\n<li><p>Använd <a class=\"reference internal\" href=\"/sv/6.1/topics/testing/advanced/#django.test.RequestFactory\" title=\"django.test.RequestFactory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestFactory</span></code></a> för att testa vyfunktioner direkt, förbi routing- och middleware-lagren.</p></li>\n<li><p>Använd ramverk i webbläsaren som <a class=\"reference external\" href=\"https://www.selenium.dev/\">Selenium</a> för att testa <em>renderad</em> HTML och <em>beteendet</em> på webbsidor, nämligen JavaScript-funktionalitet. Django ger också särskilt stöd för dessa ramverk; se avsnittet om <a class=\"reference internal\" href=\"#django.test.LiveServerTestCase\" title=\"django.test.LiveServerTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code></a> för mer information.</p></li>\n</ul>\n<p>En omfattande testsvit bör använda en kombination av alla dessa testtyper.</p>\n<section id=\"overview-and-a-quick-example\">\n<h3>Översikt och ett snabbt exempel<a class=\"heading-anchor\" href=\"#overview-and-a-quick-example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För att använda testklienten, instansiera <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.Client</span></code> och hämta webbsidor:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><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\">Client</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"s2\">&quot;/login/&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;username&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;john&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;password&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;smith&quot;</span><span class=\"p\">})</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span>\n<span class=\"go\">200</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/details/&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">content</span>\n<span class=\"go\">b&#39;&lt;!DOCTYPE html...&#39;</span>\n</code></pre></div>\n<p>Som exemplet visar kan du instansiera <code class=\"docutils literal notranslate\"><span class=\"pre\">Client</span></code> från en session i den interaktiva Python-tolken.</p>\n<p>Notera några viktiga saker om hur testklienten fungerar:</p>\n<ul>\n<li><p>Testklienten kräver <em>inte</em> att webbservern är igång. Faktum är att det går alldeles utmärkt utan att någon webbserver körs alls! Det beror på att den undviker <a class=\"reference external\" href=\"HTTP:s\">HTTP:s</a> overhead och hanterar Django-ramverket direkt. Detta hjälper till att få enhetstesterna att köras snabbt.</p></li>\n<li><p>När du hämtar sidor ska du komma ihåg att ange <em>sökvägen</em> i URL:en, inte hela domänen. Detta är till exempel korrekt:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/login/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Detta är felaktigt:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;https://www.example.com/login/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Testklienten kan inte hämta webbsidor som inte drivs av ditt Django-projekt. Om du behöver hämta andra webbsidor kan du använda en modul från Pythons standardbibliotek, t.ex. <a class=\"reference external\" href=\"https://docs.python.org/3/library/urllib.html#module-urllib\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">urllib</span></code></a>.</p>\n</li>\n<li><p>För att lösa URL:er använder testklienten den URLconf som pekas ut av din inställning <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-ROOT_URLCONF\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ROOT_URLCONF</span></code></a>.</p></li>\n<li><p>Även om ovanstående exempel skulle fungera i Pythons interaktiva tolk, är en del av testklientens funktionalitet, särskilt den mallrelaterade funktionaliteten, endast tillgänglig <em>när tester körs</em>.</p>\n<p>Anledningen till detta är att Djangos testlöpare utför lite svart magi för att avgöra vilken mall som laddades av en viss vy. Denna svarta magi (i huvudsak en patchning av Djangos mallsystem i minnet) sker endast under testkörning.</p>\n</li>\n<li><p>Som standard kommer testklienten att inaktivera alla CSRF-kontroller som utförs av din webbplats.</p>\n<p>Om du av någon anledning <em>vill</em> att testklienten ska utföra CSRF-kontroller kan du skapa en instans av testklienten som tvingar fram CSRF-kontroller. För att göra detta, skicka in argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">enforce_csrf_checks</span></code> när du konstruerar din klient:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><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\">Client</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">csrf_client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">(</span><span class=\"n\">enforce_csrf_checks</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n</ul>\n</section>\n<section id=\"making-requests\">\n<h3>Att göra förfrågningar<a class=\"heading-anchor\" href=\"#making-requests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Använd klassen <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.Client</span></code> för att göra förfrågningar.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Client</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">enforce_csrf_checks</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raise_request_exception</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">json_encoder</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DjangoJSONEncoder</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</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\">query_params</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">defaults</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En testande HTTP-klient. Tar emot flera argument som kan anpassa beteendet.</p>\n<p>med <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code> kan du ange standardrubriker som ska skickas med varje begäran. Till exempel, för att ställa in en <code class=\"docutils literal notranslate\"><span class=\"pre\">User-Agent</span></code> header:</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=\"n\">client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">(</span><span class=\"n\">headers</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;user-agent&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;curl/7.79.1&quot;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>med <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> kan du ange standardfrågesträngen som kommer att ställas in vid varje förfrågan.</p>\n<p>Godtyckliga nyckelordsargument i <code class=\"docutils literal notranslate\"><span class=\"pre\">**defaults</span></code> ställer in WSGI <span class=\"target\" id=\"index-6\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-3333/#environ-variables\"><strong>environ-variabler</strong></a>. Till exempel, för att ställa in skriptnamnet:</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=\"n\">client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">(</span><span class=\"n\">SCRIPT_NAME</span><span class=\"o\">=</span><span class=\"s2\">&quot;/app/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Nyckelordsargument som börjar med prefixet <code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_</span></code> anges som rubriker, men parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code> bör föredras för läsbarhetens skull.</p>\n</aside>\n<p>The values from the <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code>, and <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> keyword\narguments passed to <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>,\n<a class=\"reference internal\" href=\"#django.test.Client.post\" title=\"django.test.Client.post\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">post()</span></code></a>, etc. have precedence over\nthe defaults passed to the class constructor.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">enforce_csrf_checks</span></code> kan användas för att testa CSRF-skydd (se ovan).</p>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">raise_request_exception</span></code> gör det möjligt att kontrollera om undantag som uppstår under begäran också ska uppstå i testet. Standardvärdet är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">json_encoder</span></code> gör det möjligt att ange en anpassad JSON-kodare för JSON-serialiseringen som beskrivs i <a class=\"reference internal\" href=\"#django.test.Client.post\" title=\"django.test.Client.post\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">post()</span></code></a>.</p>\n<p>När du har en <code class=\"docutils literal notranslate\"><span class=\"pre\">Client</span></code>-instans kan du anropa någon av följande metoder:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.get\">\n<span class=\"sig-name descname\"><span class=\"pre\">get</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</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\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</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\">query_params</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.get\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Gör en GET-begäran på den angivna <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> och returnerar ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code>-objekt, som dokumenteras nedan.</p>\n<p>Nyckel-värdeparen i ordlistan <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> används för att ställa in frågesträngar. Ett exempel:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customers/details/&quot;</span><span class=\"p\">,</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;age&quot;</span><span class=\"p\">:</span> <span class=\"mi\">7</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>…kommer att resultera i en utvärdering av en GET-begäran som motsvarar:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>/customers/details/?name=fred&amp;age=7\n</code></pre></div>\n<p>Det är också möjligt att skicka dessa parametrar till parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code>. <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> är dock att föredra eftersom den fungerar för alla HTTP-metoder.</p>\n<p>Parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code> kan användas för att ange vilka rubriker som ska skickas i begäran. Till exempel:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;/customers/details/&quot;</span><span class=\"p\">,</span>\n<span class=\"gp\">... </span>    <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;age&quot;</span><span class=\"p\">:</span> <span class=\"mi\">7</span><span class=\"p\">},</span>\n<span class=\"gp\">... </span>    <span class=\"n\">headers</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;accept&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;application/json&quot;</span><span class=\"p\">},</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>…will send the HTTP header <code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_ACCEPT</span></code> to the details view, which\nis a good way to test code paths that use the\n<a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpRequest.accepts\" title=\"django.http.HttpRequest.accepts\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">django.http.HttpRequest.accepts()</span></code></a> method.</p>\n<p>Godtyckliga nyckelordsargument ställer in WSGI <span class=\"target\" id=\"index-7\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-3333/#environ-variables\"><strong>environ-variabler</strong></a>. Till exempel headers för att ange skriptnamnet:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">SCRIPT_NAME</span><span class=\"o\">=</span><span class=\"s2\">&quot;/app/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om du redan har GET-argumenten i URL-kodad form kan du använda den kodningen i stället för att använda data-argumentet. Till exempel kan den föregående GET-begäran också ställas som:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customers/details/?name=fred&amp;age=7&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om du anger en URL med både kodade GET-data och antingen ett query_params- eller data-argument kommer dessa argument att ha företräde.</p>\n<p>Om du anger <code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> kommer klienten att följa alla omdirigeringar och ett <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_chain</span></code>-attribut kommer att anges i svarsobjektet som innehåller tuples av de mellanliggande webbadresserna och statuskoderna.</p>\n<p>Om du hade en URL <code class=\"docutils literal notranslate\"><span class=\"pre\">/redirect_me/</span></code> som omdirigerades till <code class=\"docutils literal notranslate\"><span class=\"pre\">/next/</span></code>, som omdirigerades till <code class=\"docutils literal notranslate\"><span class=\"pre\">/final/</span></code>, är det här vad du skulle se:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/redirect_me/&quot;</span><span class=\"p\">,</span> <span class=\"n\">follow</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">redirect_chain</span>\n<span class=\"go\">[(&#39;http://testserver/next/&#39;, 302), (&#39;http://testserver/final/&#39;, 302)]</span>\n</code></pre></div>\n<p>Om du anger <code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> kommer klienten att emulera en HTTPS-begäran.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.post\">\n<span class=\"sig-name descname\"><span class=\"pre\">post</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</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\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">MULTIPART_CONTENT</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</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\">query_params</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.post\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Gör en POST-begäran på den angivna <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> och returnerar ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code>-objekt, som dokumenteras nedan.</p>\n<p>Nyckel-värdeparen i ordlistan <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> används för att skicka POST-data. Till exempel:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"s2\">&quot;/login/&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;passwd&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;secret&quot;</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>…kommer att resultera i en utvärdering av en POST-begäran till denna URL:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>/login/\n</code></pre></div>\n<p>…med denna POST-data:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>name=fred&amp;passwd=secret\n</code></pre></div>\n<p>Om du anger <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> som <em class=\"mimetype\">application/json</em>, serialiseras <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> med <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.dumps\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">json.dumps()</span></code></a> om det är en dict, lista eller tuple. Serialisering utförs med <a class=\"reference internal\" href=\"/sv/6.1/topics/serialization/#django.core.serializers.json.DjangoJSONEncoder\" title=\"django.core.serializers.json.DjangoJSONEncoder\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoJSONEncoder</span></code></a> som standard, och kan åsidosättas genom att tillhandahålla ett <code class=\"docutils literal notranslate\"><span class=\"pre\">json_encoder</span></code> argument till <a class=\"reference internal\" href=\"#django.test.Client\" title=\"django.test.Client\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Client</span></code></a>. Denna serialisering sker också för <a class=\"reference internal\" href=\"#django.test.Client.put\" title=\"django.test.Client.put\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">put()</span></code></a>, <a class=\"reference internal\" href=\"#django.test.Client.patch\" title=\"django.test.Client.patch\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">patch()</span></code></a> och <a class=\"reference internal\" href=\"#django.test.Client.delete\" title=\"django.test.Client.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a> förfrågningar.</p>\n<p>Om du anger någon annan <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> (t.ex. <em class=\"mimetype\">text/xml</em> för en XML-nyttolast) skickas innehållet i <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> som det är i POST-begäran, med <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> i HTTP-rubriken <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code>.</p>\n<p>Om du inte anger något värde för <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code> kommer värdena i <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> att överföras med en innehållstyp av <em class=\"mimetype\">multipart/form-data</em>. I det här fallet kommer nyckel-värdeparen i <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> att kodas som ett multipartmeddelande och användas för att skapa POST-datanyttolasten.</p>\n<p>Om du vill skicka in flera värden för en viss nyckel - t.ex. för att ange urvalen för en <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;select</span> <span class=\"pre\">multiple&gt;</span></code> - ska du ange värdena som en lista eller tupel för den nyckel som krävs. Till exempel skulle detta värde av <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> skicka tre valda värden för fältet med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">choices</span></code>:</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=\"p\">{</span><span class=\"s2\">&quot;choices&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;a&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;b&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;d&quot;</span><span class=\"p\">]}</span>\n</code></pre></div>\n<p>Att skicka filer är ett specialfall. För att POSTa en fil behöver du bara ange filfältets namn som en nyckel och ett filhandtag till filen du vill ladda upp som ett värde. Om ditt formulär till exempel har fälten <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">attachment</span></code>, är det senare en <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/fields/#django.forms.FileField\" title=\"django.forms.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;wishlist.doc&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;rb&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">fp</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customers/wishes/&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;attachment&quot;</span><span class=\"p\">:</span> <span class=\"n\">fp</span><span class=\"p\">})</span>\n<span class=\"gp\">...</span>\n</code></pre></div>\n<p>Du kan också tillhandahålla vilket filliknande objekt som helst (t.ex. <a class=\"reference external\" href=\"https://docs.python.org/3/library/io.html#io.StringIO\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">StringIO</span></code></a> eller <a class=\"reference external\" href=\"https://docs.python.org/3/library/io.html#io.BytesIO\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">BytesIO</span></code></a>) som ett filhandtag. Om du laddar upp till en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> behöver objektet ett <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code>-attribut som skickar <a class=\"reference internal\" href=\"/sv/6.1/ref/validators/#django.core.validators.validate_image_file_extension\" title=\"django.core.validators.validate_image_file_extension\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">validate_image_file_extension</span></code></a>-validatorn. Till exempel:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">io</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BytesIO</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">img</span> <span class=\"o\">=</span> <span class=\"n\">BytesIO</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"sa\">b</span><span class=\"s2\">&quot;GIF89a</span><span class=\"se\">\\x01\\x00\\x01\\x00\\x00\\x00\\x00</span><span class=\"s2\">!</span><span class=\"se\">\\xf9\\x04\\x01\\x00\\x00\\x00</span><span class=\"s2\">&quot;</span>\n<span class=\"gp\">... </span>    <span class=\"sa\">b</span><span class=\"s2\">&quot;</span><span class=\"se\">\\x00</span><span class=\"s2\">,</span><span class=\"se\">\\x00\\x00\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\x02\\x01\\x00\\x00</span><span class=\"s2\">&quot;</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">img</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;myimage.gif&quot;</span>\n</code></pre></div>\n<p>Observera att om du vill använda samma filhandtag för flera <code class=\"docutils literal notranslate\"><span class=\"pre\">post()</span></code>-anrop måste du manuellt återställa filpekaren mellan inläggen. Det enklaste sättet att göra detta är att manuellt stänga filen efter att den har levererats till <code class=\"docutils literal notranslate\"><span class=\"pre\">post()</span></code>, som demonstreras ovan.</p>\n<p>Du bör också se till att filen öppnas på ett sätt som gör det möjligt att läsa data. Om filen innehåller binära data, t.ex. en bild, innebär det att du måste öppna filen i läget <code class=\"docutils literal notranslate\"><span class=\"pre\">rb</span></code> (read binary).</p>\n<p>Parametrarna <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> fungerar på samma sätt som för <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a>.</p>\n<p>Om URL:en som du begär med en POST innehåller kodade parametrar, kommer dessa parametrar att göras tillgängliga i request.GET-data. Om du t.ex. skulle göra begäran:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;/login/&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;passwd&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;secret&quot;</span><span class=\"p\">},</span> <span class=\"n\">query_params</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;visitor&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;true&quot;</span><span class=\"p\">}</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>… kan vyn som hanterar denna begäran fråga request.POST för att hämta användarnamn och lösenord, och kan fråga request.GET för att avgöra om användaren var en besökare.</p>\n<p>Om du anger <code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> kommer klienten att följa alla omdirigeringar och ett <code class=\"docutils literal notranslate\"><span class=\"pre\">redirect_chain</span></code>-attribut kommer att anges i svarsobjektet som innehåller tuples av de mellanliggande webbadresserna och statuskoderna.</p>\n<p>Om du anger <code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> kommer klienten att emulera en HTTPS-begäran.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.head\">\n<span class=\"sig-name descname\"><span class=\"pre\">head</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</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\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</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\">query_params</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.head\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Gör en HEAD-förfrågan på den angivna <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> och returnerar ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code>-objekt. Denna metod fungerar precis som <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a>, inklusive parametrarna <code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code>, förutom att den inte returnerar en meddelandekropp.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.options\">\n<span class=\"sig-name descname\"><span class=\"pre\">options</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'application/octet-stream'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</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\">query_params</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.options\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Gör en OPTIONS-begäran på den angivna <code class=\"docutils literal notranslate\"><span class=\"pre\">vägen</span></code> och returnerar ett <code class=\"docutils literal notranslate\"><span class=\"pre\">svar</span></code>-objekt. Användbart för att testa RESTful-gränssnitt.</p>\n<p>När <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> tillhandahålls används det som förfrågningsunderlag och ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code>-huvud sätts till <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code>.</p>\n<p>Parametrarna <code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> fungerar på samma sätt som för <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.put\">\n<span class=\"sig-name descname\"><span class=\"pre\">put</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'application/octet-stream'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</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\">query_params</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.put\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Gör en PUT-förfrågan på den angivna <code class=\"docutils literal notranslate\"><span class=\"pre\">path</span></code> och returnerar ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code>-objekt. Användbart för att testa RESTful-gränssnitt.</p>\n<p>När <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> tillhandahålls används det som förfrågningsunderlag och ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code>-huvud sätts till <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code>.</p>\n<p>Parametrarna <code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> fungerar på samma sätt som för <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.patch\">\n<span class=\"sig-name descname\"><span class=\"pre\">patch</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'application/octet-stream'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</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\">query_params</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.patch\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Gör en PATCH-förfrågan på den angivna <code class=\"docutils literal notranslate\"><span class=\"pre\">banan</span></code> och returnerar ett <code class=\"docutils literal notranslate\"><span class=\"pre\">svar</span></code>-objekt. Användbart för att testa RESTful-gränssnitt.</p>\n<p>Parametrarna <code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> fungerar på samma sätt som för <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.delete\">\n<span class=\"sig-name descname\"><span class=\"pre\">delete</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content_type</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'application/octet-stream'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</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\">query_params</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.delete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Gör en DELETE-begäran på den angivna <code class=\"docutils literal notranslate\"><span class=\"pre\">vägen</span></code> och returnerar ett <code class=\"docutils literal notranslate\"><span class=\"pre\">svar</span></code>-objekt. Användbart för att testa RESTful-gränssnitt.</p>\n<p>När <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> tillhandahålls används det som förfrågningsunderlag och ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code>-huvud sätts till <code class=\"docutils literal notranslate\"><span class=\"pre\">content_type</span></code>.</p>\n<p>Parametrarna <code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> fungerar på samma sätt som för <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.trace\">\n<span class=\"sig-name descname\"><span class=\"pre\">trace</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">follow</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">secure</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</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\">query_params</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">extra</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.trace\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Gör en TRACE-begäran på den angivna <code class=\"docutils literal notranslate\"><span class=\"pre\">vägen</span></code> och returnerar ett <code class=\"docutils literal notranslate\"><span class=\"pre\">svar</span></code>-objekt. Användbar för att simulera diagnostiska prober.</p>\n<p>Till skillnad från de andra förfrågningsmetoderna tillhandahålls inte <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> som en nyckelordsparameter för att följa <span class=\"target\" id=\"index-8\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-9.3.8\"><strong>RFC 9110 Section 9.3.8</strong></a>, som föreskriver att TRACE-förfrågningar inte får ha en kropp.</p>\n<p>Parametrarna <code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">secure</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">headers</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">query_params</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> fungerar på samma sätt som för <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.login\">\n<span class=\"sig-name descname\"><span class=\"pre\">login</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\">credentials</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.alogin\">\n<span class=\"sig-name descname\"><span class=\"pre\">alogin</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\">credentials</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.alogin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">alogin()</span></code></p>\n<p>Om din webbplats använder Djangos <a class=\"reference internal\" href=\"/sv/6.1/topics/auth/\"><span class=\"doc\">authentication system</span></a> och du hanterar inloggning av användare, kan du använda testklientens <code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code>-metod för att simulera effekten av att en användare loggar in på webbplatsen.</p>\n<p>När du anropar den här metoden kommer testklienten att ha alla cookies och sessionsdata som krävs för att klara inloggningsbaserade tester som kan ingå i en vy.</p>\n<p>Formatet på argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">credentials</span></code> beror på vilken <span class=\"xref std std-ref\">authentication backend &lt;authentication-backends&gt;`</span> du använder (som konfigureras av din <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-AUTHENTICATION_BACKENDS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">AUTHENTICATION_BACKENDS</span></code></a>-inställning). Om du använder standardautentiseringsbackend som tillhandahålls av Django (<code class=\"docutils literal notranslate\"><span class=\"pre\">ModelBackend</span></code>), bör <code class=\"docutils literal notranslate\"><span class=\"pre\">credentials</span></code> vara användarens användarnamn och lösenord, som tillhandahålls som nyckelordsargument:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">login</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"n\">password</span><span class=\"o\">=</span><span class=\"s2\">&quot;secret&quot;</span><span class=\"p\">)</span>\n\n<span class=\"go\"># Now you can access a view that&#39;s only available to logged-in users.</span>\n</code></pre></div>\n<p>Om du använder en annan autentiseringsbackend kan den här metoden kräva andra referenser. Den kräver de autentiseringsuppgifter som krävs av din backends <code class=\"docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code> metod.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code> returns <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> if the credentials were accepted and\nlogin was successful.</p>\n<p>Finally, you’ll need to remember to create user accounts before you can\nuse this method. As we explained above, the test runner is executed\nusing a test database, which contains no users by default. As a result,\nuser accounts that are valid on your production site will not work\nunder test conditions. You’ll need to create users as part of the test\nsuite – either manually (using the Django model API) or with a test\nfixture. Remember that if you want your test user to have a password,\nyou can’t set the user’s password by setting the password attribute\ndirectly – you must use the\n<a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/auth/#django.contrib.auth.models.User.set_password\" title=\"django.contrib.auth.models.User.set_password\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">set_password()</span></code></a> function to\nstore a correctly hashed password. Alternatively, you can use the\n<a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/auth/#django.contrib.auth.models.UserManager.create_user\" title=\"django.contrib.auth.models.UserManager.create_user\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">create_user()</span></code></a> helper\nmethod to create a new user with a correctly hashed password.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.force_login\">\n<span class=\"sig-name descname\"><span class=\"pre\">force_login</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">user</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">backend</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.Client.force_login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.aforce_login\">\n<span class=\"sig-name descname\"><span class=\"pre\">aforce_login</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">user</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">backend</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.Client.aforce_login\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">aforce_login()</span></code></p>\n<p>Om din webbplats använder Djangos <a class=\"reference internal\" href=\"/sv/6.1/topics/auth/\"><span class=\"doc\">authentication system</span></a> kan du använda metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">force_login()</span></code> för att simulera effekten av att en användare loggar in på webbplatsen. Använd den här metoden istället för <a class=\"reference internal\" href=\"#django.test.Client.login\" title=\"django.test.Client.login\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">login()</span></code></a> när ett test kräver att en användare är inloggad och detaljerna om hur en användare loggar in inte är viktiga.</p>\n<p>Till skillnad från <code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code> hoppar den här metoden över autentiserings- och verifieringsstegen: inaktiva användare (<a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/auth/#django.contrib.auth.models.User.is_active\" title=\"django.contrib.auth.models.User.is_active\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">is_active=False</span></code></a>) tillåts logga in och användarens autentiseringsuppgifter behöver inte anges.</p>\n<p>Användaren kommer att ha sitt <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code>-attribut inställt till värdet av <code class=\"docutils literal notranslate\"><span class=\"pre\">backend</span></code>-argumentet (som bör vara en prickad Python-sökvägssträng), eller till <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.AUTHENTICATION_BACKENDS[0]</span></code> om ett värde inte tillhandahålls. Funktionen <a class=\"reference internal\" href=\"/sv/6.1/topics/auth/default/#django.contrib.auth.authenticate\" title=\"django.contrib.auth.authenticate\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">authenticate()</span></code></a> som anropas av <a class=\"reference internal\" href=\"#django.test.Client.login\" title=\"django.test.Client.login\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">login()</span></code></a> annoterar normalt användaren så här.</p>\n<p>Den här metoden är snabbare än <code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code> eftersom de dyra hashingalgoritmerna för lösenord kringgås. Du kan också snabba upp <code class=\"docutils literal notranslate\"><span class=\"pre\">login()</span></code> genom att <a class=\"reference internal\" href=\"/sv/6.1/topics/testing/overview/#speeding-up-tests-auth-hashers\"><span class=\"std std-ref\">använda en svagare hasher när du testar</span></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.logout\">\n<span class=\"sig-name descname\"><span class=\"pre\">logout</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.logout\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.alogout\">\n<span class=\"sig-name descname\"><span class=\"pre\">alogout</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.alogout\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><em>Asynkron version</em>: <code class=\"docutils literal notranslate\"><span class=\"pre\">alogout()</span></code></p>\n<p>Om din webbplats använder Djangos <a class=\"reference internal\" href=\"/sv/6.1/topics/auth/\"><span class=\"doc\">autentiseringssystem</span></a>, kan metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">logout()</span></code> användas för att simulera effekten av att en användare loggar ut från din webbplats.</p>\n<p>När du har anropat den här metoden kommer testklienten att ha alla cookies och sessionsdata rensade till standardvärden. Efterföljande förfrågningar kommer att se ut att komma från en <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/auth/#django.contrib.auth.models.AnonymousUser\" title=\"django.contrib.auth.models.AnonymousUser\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AnonymousUser</span></code></a>.</p>\n</dd></dl>\n\n</dd></dl>\n\n</section>\n<section id=\"testing-responses\">\n<h3>Testning av svar<a class=\"heading-anchor\" href=\"#testing-responses\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Metoderna <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">post()</span></code> returnerar båda ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code>-objekt. Detta <code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code>-objekt är <em>inte</em> samma som <code class=\"docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code>-objektet som returneras av Django-vyer; testsvarsobjektet har några ytterligare data som är användbara för testkod för att verifiera.</p>\n<p>Specifikt har ett <code class=\"docutils literal notranslate\"><span class=\"pre\">Response</span></code>-objekt följande attribut:</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">Response</span></span><a class=\"heading-anchor\" href=\"#django.test.Response\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.client\">\n<span class=\"sig-name descname\"><span class=\"pre\">client</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.client\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Den testklient som användes för att göra den begäran som resulterade i svaret.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.content\">\n<span class=\"sig-name descname\"><span class=\"pre\">content</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.content\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Svarets innehåll, som en bytestring. Detta är det slutliga sidinnehållet som återges av vyn, eller ett eventuellt felmeddelande.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.context\">\n<span class=\"sig-name descname\"><span class=\"pre\">context</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.context\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Mallen <code class=\"docutils literal notranslate\"><span class=\"pre\">Context</span></code>-instans som användes för att rendera den mall som producerade svarsinnehållet.</p>\n<p>Om den renderade sidan använde flera mallar kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">context</span></code> att vara en lista med <code class=\"docutils literal notranslate\"><span class=\"pre\">Context</span></code>-objekt, i den ordning de renderades.</p>\n<p>Oavsett hur många mallar som används vid rendering kan du hämta kontextvärden med operatorn <code class=\"docutils literal notranslate\"><span class=\"pre\">[]</span></code>. Exempelvis kan kontextvariabeln <code class=\"docutils literal notranslate\"><span class=\"pre\">name</span></code> hämtas med hjälp av:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/foo/&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;Arthur&#39;</span>\n</code></pre></div>\n<aside class=\"admonition-not-using-django-templates admonition\">\n<p class=\"admonition-title\">Använder du inte Django-mallar?</p>\n<p>Detta attribut fylls endast i när du använder <a class=\"reference internal\" href=\"/sv/6.1/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code></a> backend. Om du använder en annan mallmotor kan <a class=\"reference internal\" href=\"/sv/6.1/ref/template-response/#django.template.response.SimpleTemplateResponse.context_data\" title=\"django.template.response.SimpleTemplateResponse.context_data\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">context_data</span></code></a> vara ett lämpligt alternativ för svar med det attributet.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.exc_info\">\n<span class=\"sig-name descname\"><span class=\"pre\">exc_info</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.exc_info\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En tupel med tre värden som ger information om det eventuella ohanterade undantag som inträffade under vyn.</p>\n<p>Värdena är (type, value, traceback), samma som returneras av Pythons <a class=\"reference external\" href=\"https://docs.python.org/3/library/sys.html#sys.exc_info\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">sys.exc_info()</span></code></a>. Deras betydelser är:</p>\n<ul class=\"simple\">\n<li><p><em>typ</em>: Typ av undantag.</p></li>\n<li><p><em>värde</em>: Instansen för undantaget.</p></li>\n<li><p><em>traceback</em>: Ett traceback-objekt som kapslar in anropsstacken vid den punkt där undantaget ursprungligen inträffade.</p></li>\n</ul>\n<p>Om inget undantag inträffade kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">exc_info</span></code> att vara <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.json\">\n<span class=\"sig-name descname\"><span class=\"pre\">json</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\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Response.json\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Svarets text, tolkad som JSON. Extra nyckelordsargument skickas till <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#json.loads\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">json.loads()</span></code></a>. Till exempel: json.loads:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/foo/&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">json</span><span class=\"p\">()[</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">]</span>\n<span class=\"go\">&#39;Arthur&#39;</span>\n</code></pre></div>\n<p>Om rubriken <code class=\"docutils literal notranslate\"><span class=\"pre\">Content-Type</span></code> inte är <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;application/json&quot;</span></code>, kommer ett <code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">ValueError`</span></code> att uppstå när du försöker analysera svaret.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.request\">\n<span class=\"sig-name descname\"><span class=\"pre\">request</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.request\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Förfrågningsdata som stimulerade svaret.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.wsgi_request\">\n<span class=\"sig-name descname\"><span class=\"pre\">wsgi_request</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.wsgi_request\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Instansen <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIRequest</span></code> som genererades av testhanteraren som genererade svaret.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.status_code\">\n<span class=\"sig-name descname\"><span class=\"pre\">status_code</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.status_code\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>HTTP-status för svaret, som ett heltal. För en fullständig lista över definierade koder, se <a class=\"reference external\" href=\"https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml\">IANA status code registry</a>.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.templates\">\n<span class=\"sig-name descname\"><span class=\"pre\">templates</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.templates\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En lista över <code class=\"docutils literal notranslate\"><span class=\"pre\">Template</span></code>-instanser som används för att rendera det slutliga innehållet, i den ordning de renderades. För varje mall i listan, använd <code class=\"docutils literal notranslate\"><span class=\"pre\">template.name</span></code> för att få mallens filnamn, om mallen laddades från en fil. (Namnet är en sträng som till exempel <code class=\"docutils literal notranslate\"><span class=\"pre\">'admin/index.html'</span></code>.)</p>\n<aside class=\"admonition-not-using-django-templates admonition\">\n<p class=\"admonition-title\">Använder du inte Django-mallar?</p>\n<p>Detta attribut fylls endast i när du använder <a class=\"reference internal\" href=\"/sv/6.1/topics/templates/#django.template.backends.django.DjangoTemplates\" title=\"django.template.backends.django.DjangoTemplates\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">DjangoTemplates</span></code></a> backend. Om du använder en annan mallmotor kan <a class=\"reference internal\" href=\"/sv/6.1/ref/template-response/#django.template.response.SimpleTemplateResponse.template_name\" title=\"django.template.response.SimpleTemplateResponse.template_name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">template_name</span></code></a> vara ett lämpligt alternativ om du bara behöver namnet på den mall som används för rendering.</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Response.resolver_match\">\n<span class=\"sig-name descname\"><span class=\"pre\">resolver_match</span></span><a class=\"heading-anchor\" href=\"#django.test.Response.resolver_match\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>En instans av <a class=\"reference internal\" href=\"/sv/6.1/ref/urlresolvers/#django.urls.ResolverMatch\" title=\"django.urls.ResolverMatch\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ResolverMatch</span></code></a> för svaret. Du kan till exempel använda attributet <a class=\"reference internal\" href=\"/sv/6.1/ref/urlresolvers/#django.urls.ResolverMatch.func\" title=\"django.urls.ResolverMatch.func\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">func</span></code></a> för att verifiera den vy som serverade svaret:</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=\"c1\"># my_view here is a function based view.</span>\n<span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">resolver_match</span><span class=\"o\">.</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">my_view</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Class-based views need to compare the view_class, as the</span>\n<span class=\"c1\"># functions generated by as_view() won&#39;t be equal.</span>\n<span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertIs</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">resolver_match</span><span class=\"o\">.</span><span class=\"n\">func</span><span class=\"o\">.</span><span class=\"n\">view_class</span><span class=\"p\">,</span> <span class=\"n\">MyView</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om den angivna URL:en inte hittas kommer åtkomst till detta attribut att ge upphov till ett <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.urls.Resolver404\" title=\"django.urls.Resolver404\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">Resolver404</span></code></a> undantag.</p>\n</dd></dl>\n\n</dd></dl>\n\n<p>Precis som med ett vanligt svar kan du också komma åt rubrikerna via <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse.headers\" title=\"django.http.HttpResponse.headers\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">HttpResponse.headers</span></code></a>. Du kan till exempel bestämma innehållstypen i ett svar med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">response.headers['Content-Type']</span></code>.</p>\n</section>\n<section id=\"exceptions\">\n<h3>Undantag<a class=\"heading-anchor\" href=\"#exceptions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du riktar testklienten mot en vy som ger upphov till ett undantag och <code class=\"docutils literal notranslate\"><span class=\"pre\">Client.raise_request_exception</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>, kommer undantaget att vara synligt i testfallet. Du kan sedan använda ett standardblock <code class=\"docutils literal notranslate\"><span class=\"pre\">try</span> <span class=\"pre\">...</span> <span class=\"pre\">except</span></code> eller <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaises\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRaises()</span></code></a> för att testa för undantag.</p>\n<p>De enda undantagen som inte är synliga för testklienten är <a class=\"reference internal\" href=\"/sv/6.1/topics/http/views/#django.http.Http404\" title=\"django.http.Http404\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Http404</span></code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.core.exceptions.PermissionDenied\" title=\"django.core.exceptions.PermissionDenied\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">PermissionDenied</span></code></a>, <a class=\"reference external\" href=\"https://docs.python.org/3/library/exceptions.html#SystemExit\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">SystemExit</span></code></a>, och <a class=\"reference internal\" href=\"/sv/6.1/ref/exceptions/#django.core.exceptions.SuspiciousOperation\" title=\"django.core.exceptions.SuspiciousOperation\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SuspiciousOperation</span></code></a>. Django fångar dessa undantag internt och omvandlar dem till lämpliga HTTP-svarskoder. I dessa fall kan du kontrollera <code class=\"docutils literal notranslate\"><span class=\"pre\">response.status_code</span></code> i ditt test.</p>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">Client.raise_request_exception</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> kommer testklienten att returnera ett 500-svar som skulle returneras till en webbläsare. Svaret har attributet <a class=\"reference internal\" href=\"#django.test.Response.exc_info\" title=\"django.test.Response.exc_info\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">exc_info</span></code></a> för att ge information om det ohanterade undantaget.</p>\n</section>\n<section id=\"persistent-state\">\n<h3>Beständigt tillstånd<a class=\"heading-anchor\" href=\"#persistent-state\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Testklienten är tillståndsbaserad. Om ett svar returnerar en cookie, kommer denna cookie att lagras i testklienten och skickas med alla efterföljande <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code>- och <code class=\"docutils literal notranslate\"><span class=\"pre\">post()</span></code>-förfrågningar.</p>\n<p>Utgångspolicyerna för dessa cookies följs inte. Om du vill att en cookie ska upphöra att gälla måste du antingen ta bort den manuellt eller skapa en ny instans av <code class=\"docutils literal notranslate\"><span class=\"pre\">Client</span></code> (vilket i praktiken innebär att alla cookies tas bort).</p>\n<p>En testklient har attribut som lagrar information om beständigt tillstånd. Du kan komma åt dessa egenskaper som en del av ett testvillkor.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.cookies\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Client.</span></span><span class=\"sig-name descname\"><span class=\"pre\">cookies</span></span><a class=\"heading-anchor\" href=\"#django.test.Client.cookies\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett Python <a class=\"reference external\" href=\"https://docs.python.org/3/library/http.cookies.html#http.cookies.SimpleCookie\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleCookie</span></code></a>-objekt som innehåller de aktuella värdena för alla klientcookies. Se dokumentationen för modulen <a class=\"reference external\" href=\"https://docs.python.org/3/library/http.cookies.html#module-http.cookies\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">http.cookies</span></code></a> för mer information.</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.session\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Client.</span></span><span class=\"sig-name descname\"><span class=\"pre\">session</span></span><a class=\"heading-anchor\" href=\"#django.test.Client.session\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Ett ordboksliknande objekt som innehåller sessionsinformation. Se <a class=\"reference internal\" href=\"/sv/6.1/topics/http/sessions/\"><span class=\"doc\">session documentation</span></a> för fullständig information.</p>\n<p>För att ändra sessionen och sedan spara den måste den först lagras i en variabel (eftersom en ny <code class=\"docutils literal notranslate\"><span class=\"pre\">SessionStore</span></code> skapas varje gång denna egenskap används):</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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_something</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"n\">session</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">session</span>\n    <span class=\"n\">session</span><span class=\"p\">[</span><span class=\"s2\">&quot;somekey&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;test&quot;</span>\n    <span class=\"n\">session</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.Client.asession\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">Client.</span></span><span class=\"sig-name descname\"><span class=\"pre\">asession</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.Client.asession\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Detta liknar attributet <a class=\"reference internal\" href=\"#django.test.Client.session\" title=\"django.test.Client.session\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">session</span></code></a> men det fungerar i asynkrona sammanhang.</p>\n</dd></dl>\n\n</section>\n<section id=\"setting-the-language\">\n<h3>Ställa in språk<a class=\"heading-anchor\" href=\"#setting-the-language\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>När du testar applikationer som stöder internationalisering och lokalisering kanske du vill ställa in språket för en testklientbegäran. Metoden för att göra detta beror på om <a class=\"reference internal\" href=\"/sv/6.1/ref/middleware/#django.middleware.locale.LocaleMiddleware\" title=\"django.middleware.locale.LocaleMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LocaleMiddleware</span></code></a> är aktiverad eller inte.</p>\n<p>Om middleware är aktiverat kan språket ställas in genom att skapa en cookie med namnet <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-LANGUAGE_COOKIE_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LANGUAGE_COOKIE_NAME</span></code></a> och ett värde som motsvarar språkkoden:</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.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_language_using_cookie</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\">client</span><span class=\"o\">.</span><span class=\"n\">cookies</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">LANGUAGE_COOKIE_NAME</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">})</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">content</span><span class=\"p\">,</span> <span class=\"sa\">b</span><span class=\"s2\">&quot;Bienvenue sur mon site.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>eller genom att inkludera HTTP-huvudet <code class=\"docutils literal notranslate\"><span class=\"pre\">Accept-Language</span></code> i begäran:</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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_language_using_header</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">,</span> <span class=\"n\">headers</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s2\">&quot;accept-language&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">})</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">content</span><span class=\"p\">,</span> <span class=\"sa\">b</span><span class=\"s2\">&quot;Bienvenue sur mon site.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>När du använder dessa metoder, se till att återställa det aktiva språket i slutet av varje test:</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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">tearDown</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">activate</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">LANGUAGE_CODE</span><span class=\"p\">)</span>\n</code></pre></div>\n</aside>\n<p>Mer information finns i <a class=\"reference internal\" href=\"/sv/6.1/topics/i18n/translation/#how-django-discovers-language-preference\"><span class=\"std std-ref\">Hur Django upptäcker språkpreferenser</span></a>.</p>\n<p>Om mellanvaran inte är aktiverad kan det aktiva språket ställas in med <a class=\"reference internal\" href=\"/sv/6.1/ref/utils/#django.utils.translation.override\" title=\"django.utils.translation.override\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">translation.override()</span></code></a>:</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.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">translation</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_language_using_override</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"n\">translation</span><span class=\"o\">.</span><span class=\"n\">override</span><span class=\"p\">(</span><span class=\"s2\">&quot;fr&quot;</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">content</span><span class=\"p\">,</span> <span class=\"sa\">b</span><span class=\"s2\">&quot;Bienvenue sur mon site.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Mer information finns i <a class=\"reference internal\" href=\"/sv/6.1/topics/i18n/translation/#explicitly-setting-the-active-language\"><span class=\"std std-ref\">Explicit inställning av det aktiva språket</span></a>.</p>\n</section>\n<section id=\"example\">\n<h3>Exempel<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Följande är ett enhetstest med hjälp av testklienten:</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\">import</span><span class=\"w\"> </span><span class=\"nn\">unittest</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\">Client</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SimpleTest</span><span class=\"p\">(</span><span class=\"n\">unittest</span><span class=\"o\">.</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setUp</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Every test needs a client.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_details</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Issue a GET request.</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/details/&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Check that the response is 200 OK.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Check that the rendered context contains 5 customers.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s2\">&quot;customers&quot;</span><span class=\"p\">]),</span> <span class=\"mi\">5</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">Se även</p>\n<p><a class=\"reference internal\" href=\"/sv/6.1/topics/testing/advanced/#django.test.RequestFactory\" title=\"django.test.RequestFactory\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.test.RequestFactory</span></code></a></p>\n</aside>\n</section>\n</section>\n<section id=\"provided-test-case-classes\">\n<span id=\"django-testcase-subclasses\"></span><h2>Tillhandahållna testfallsklasser<a class=\"heading-anchor\" href=\"#provided-test-case-classes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Vanliga Python-enhetstestklasser utökar en basklass av <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">unittest.TestCase</span></code></a>. Django tillhandahåller några tillägg till denna basklass:</p>\n<figure class=\"align-default\" id=\"id4\">\n<span id=\"testcase-hierarchy-diagram\"></span><a class=\"reference internal image-reference\" href=\"../../../../../../_images/django_unittest_classes_hierarchy.svg\"><img alt=\"Hierarki av Djangos enhetstestklasser (TestCase-underklasser)\" src=\"/sv/6.1/_images/django_unittest_classes_hierarchy.svg\" style=\"width: 508px; height: 328px;\" />\n</a>\n<figcaption>\n<p><span class=\"caption-text\">Hierarki av klasser för enhetstestning av Django</span><a class=\"heading-anchor\" href=\"#id4\"><span class=\"visually-hidden\">Link to this image</span><span aria-hidden=\"true\">#</span></a></p>\n</figcaption>\n</figure>\n<p>Du kan konvertera en normal <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">unittest.TestCase</span></code></a> till någon av underklasserna: ändra basklassen för ditt test från <code class=\"docutils literal notranslate\"><span class=\"pre\">unittest.TestCase</span></code> till underklassen. Alla Pythons standardfunktioner för enhetstester kommer att finnas tillgängliga, och de kommer att kompletteras med några användbara tillägg som beskrivs i varje avsnitt nedan.</p>\n<section id=\"simpletestcase\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code><a class=\"heading-anchor\" href=\"#simpletestcase\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">SimpleTestCase</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>En subklass av <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">unittest.TestCase</span></code></a> som lägger till denna funktionalitet:</p>\n<ul>\n<li><p>Några användbara påståenden som:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Assertion</p></th>\n<th class=\"head\"><p>What it checks</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertRaisesMessage\" title=\"django.test.SimpleTestCase.assertRaisesMessage\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRaisesMessage()</span></code></a></p></td>\n<td><p>That a callable raises a certain exception</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertWarnsMessage\" title=\"django.test.SimpleTestCase.assertWarnsMessage\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertWarnsMessage()</span></code></a></p></td>\n<td><p>That a callable triggers a certain warning</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertFieldOutput\" title=\"django.test.SimpleTestCase.assertFieldOutput\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertFieldOutput()</span></code></a></p></td>\n<td><p>Form field rendering and error output</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertContains\" title=\"django.test.SimpleTestCase.assertContains\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertContains()</span></code></a></p></td>\n<td><p>Presence or absence of HTML fragments</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertTemplateUsed\" title=\"django.test.SimpleTestCase.assertTemplateUsed\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertTemplateUsed()</span></code></a></p></td>\n<td><p>Template usage in a response</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertURLEqual\" title=\"django.test.SimpleTestCase.assertURLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertURLEqual()</span></code></a></p></td>\n<td><p>That two URLs are equal</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertRedirects\" title=\"django.test.SimpleTestCase.assertRedirects\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRedirects()</span></code></a></p></td>\n<td><p>That an HTTP redirect occurred</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a></p></td>\n<td><p>HTML fragment equality</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertInHTML\" title=\"django.test.SimpleTestCase.assertInHTML\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertInHTML()</span></code></a></p></td>\n<td><p>HTML fragment containment</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertXMLEqual\" title=\"django.test.SimpleTestCase.assertXMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertXMLEqual()</span></code></a></p></td>\n<td><p>XML fragment equality or inequality</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertJSONEqual\" title=\"django.test.SimpleTestCase.assertJSONEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertJSONEqual()</span></code></a></p></td>\n<td><p>JSON fragment equality</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</li>\n<li><p>Möjligheten att köra tester med <a class=\"reference internal\" href=\"#overriding-settings\"><span class=\"std std-ref\">modified settings</span></a>.</p></li>\n<li><p>Access to the synchronous and asynchronous test clients via the\n<a class=\"reference internal\" href=\"#django.test.SimpleTestCase.client\" title=\"django.test.SimpleTestCase.client\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">client</span></code></a> and <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.async_client\" title=\"django.test.SimpleTestCase.async_client\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">async_client</span></code></a>\nattributes.</p></li>\n</ul>\n<p>Om dina tester gör några databasfrågor, använd underklasserna <a class=\"reference internal\" href=\"#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a> eller <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a>.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.databases\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">databases</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.databases\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p><a class=\"reference internal\" href=\"#django.test.SimpleTestCase\" title=\"django.test.SimpleTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code></a> tillåter inte databasfrågor som standard. Detta hjälper till att undvika att skriva frågor som påverkar andra tester eftersom varje <code class=\"docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code>-test inte körs i en transaktion. Om du inte är orolig för det här problemet kan du inaktivera det här beteendet genom att ställa in klassattributet <code class=\"docutils literal notranslate\"><span class=\"pre\">databases</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">'__all__'</span></code> på din testklass.</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code> och dess underklasser (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code>, …) förlitar sig på <code class=\"docutils literal notranslate\"><span class=\"pre\">setUpClass()</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">tearDownClass()</span></code> för att utföra vissa klassomfattande initialiseringar (t.ex. åsidosätta inställningar). Om du behöver åsidosätta dessa metoder, glöm inte att anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">super</span></code> implementationen:</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setUpClass</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">setUpClass</span><span class=\"p\">()</span>\n        <span class=\"o\">...</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">tearDownClass</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"o\">...</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">tearDownClass</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Var noga med att ta hänsyn till Pythons beteende om ett undantag uppstår under <code class=\"docutils literal notranslate\"><span class=\"pre\">setUpClass()</span></code>. Om det händer kommer varken testerna i klassen eller <code class=\"docutils literal notranslate\"><span class=\"pre\">tearDownClass()</span></code> att köras. I fallet med <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.test.TestCase</span></code></a> kommer detta att läcka transaktionen som skapats i <code class=\"docutils literal notranslate\"><span class=\"pre\">super()</span></code> vilket resulterar i olika symptom inklusive ett segmenteringsfel på vissa plattformar (rapporterat på macOS). Om du avsiktligt vill skapa ett undantag som <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.SkipTest\" title=\"(in Python v3.14)\"><code class=\"xref py py-exc docutils literal notranslate\"><span class=\"pre\">unittest.SkipTest</span></code></a> i <code class=\"docutils literal notranslate\"><span class=\"pre\">setUpClass()</span></code>, se till att göra det innan du anropar <code class=\"docutils literal notranslate\"><span class=\"pre\">super()</span></code> för att undvika detta.</p>\n</aside>\n</section>\n<section id=\"transactiontestcase\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code><a class=\"heading-anchor\" href=\"#transactiontestcase\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TransactionTestCase</span></span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> ärver från <a class=\"reference internal\" href=\"#django.test.SimpleTestCase\" title=\"django.test.SimpleTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code></a> för att lägga till några databasspecifika funktioner:</p>\n<ul class=\"simple\">\n<li><p>Återställning av databasen till ett känt tillstånd i slutet av varje test för att underlätta testning och användning av ORM.</p></li>\n<li><p>Databas <a class=\"reference internal\" href=\"#django.test.TransactionTestCase.fixtures\" title=\"django.test.TransactionTestCase.fixtures\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">fixtures</span></code></a>.</p></li>\n<li><p>Test <a class=\"reference internal\" href=\"#skipping-tests\"><span class=\"std std-ref\">hoppa över baserat på databasens backend-funktioner</span></a>.</p></li>\n<li><p>De återstående specialiserade <a class=\"reference internal\" href=\"#django.test.TransactionTestCase.assertQuerySetEqual\" title=\"django.test.TransactionTestCase.assertQuerySetEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assert*</span></code></a> -metoderna.</p></li>\n</ul>\n<p>Django’s <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a> class is a more commonly used subclass of\n<code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> that makes use of database transaction facilities\nto speed up the process of resetting the database to a known state at the\nend of each test. A consequence of this, however, is that some database\nbehaviors cannot be tested within a Django <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> class. For instance,\nyou cannot test that a block of code is executing within a transaction, as is\nrequired when using\n<a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.select_for_update\" title=\"django.db.models.query.QuerySet.select_for_update\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_for_update()</span></code></a>. In those cases,\nyou should use <code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> är identiska med undantag för det sätt på vilket databasen återställs till ett känt tillstånd och möjligheten för testkoden att testa effekterna av commit och rollback:</p>\n<ul class=\"simple\">\n<li><p>Ett <code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> återställer databasen efter testkörningen genom att trunkera alla tabeller. Ett <code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code> kan anropa commit och rollback och observera effekterna av dessa anrop på databasen.</p></li>\n<li><p>Ett <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> trunkerar däremot inte tabeller efter ett test. Istället innesluts testkoden i en databastransaktion som rullas tillbaka i slutet av testet. Detta garanterar att rollback i slutet av testet återställer databasen till dess ursprungliga tillstånd.</p></li>\n</ul>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> som körs på en databas som inte stöder rollback (t.ex. MySQL med lagringsmotorn MyISAM), och alla instanser av <code class=\"docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code>, kommer att rulla tillbaka i slutet av testet genom att ta bort alla data från testdatabasen.</p>\n<p>Appar <a class=\"reference internal\" href=\"/sv/6.1/topics/testing/overview/#test-case-serialized-rollback\"><span class=\"std std-ref\">kommer inte att se sina data laddas om</span></a>; om du behöver den här funktionen (till exempel bör tredjepartsappar aktivera detta) kan du ställa in <code class=\"docutils literal notranslate\"><span class=\"pre\">serialized_rollback</span> <span class=\"pre\">=</span> <span class=\"pre\">True</span></code> i <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code>-kroppen.</p>\n</aside>\n</section>\n<section id=\"testcase\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code><a class=\"heading-anchor\" href=\"#testcase\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.TestCase\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">TestCase</span></span><a class=\"heading-anchor\" href=\"#django.test.TestCase\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Detta är den vanligaste klassen att använda för att skriva tester i Django. Den ärver från <a class=\"reference internal\" href=\"#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a> (och i förlängningen <a class=\"reference internal\" href=\"#django.test.SimpleTestCase\" title=\"django.test.SimpleTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code></a>). Om din Django-applikation inte använder en databas, använd <a class=\"reference internal\" href=\"#django.test.SimpleTestCase\" title=\"django.test.SimpleTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SimpleTestCase</span></code></a>.</p>\n<p>Klassen:</p>\n<ul class=\"simple\">\n<li><p>Omsluter testerna i två nästlade <a class=\"reference internal\" href=\"/sv/6.1/topics/db/transactions/#django.db.transaction.atomic\" title=\"django.db.transaction.atomic\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">atomic()</span></code></a>-block: ett för hela klassen och ett för varje test. Därför, om du vill testa något specifikt databas transaktionsbeteende, använd <a class=\"reference internal\" href=\"#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a>.</p></li>\n<li><p>Kontrollerar uppskjutbara databasbegränsningar i slutet av varje test.</p></li>\n</ul>\n<p>Det ger också en ytterligare metod:</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.TestCase.setUpTestData\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">TestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">setUpTestData</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.TestCase.setUpTestData\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Det <code class=\"docutils literal notranslate\"><span class=\"pre\">atomiska</span></code> block på klassnivå som beskrivs ovan gör det möjligt att skapa initialdata på klassnivå, en gång för hela <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code>. Denna teknik möjliggör snabbare tester jämfört med att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">setUp()</span></code>.</p>\n<p>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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setUpTestData</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Set up data for the whole TestCase</span>\n        <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">foo</span> <span class=\"o\">=</span> <span class=\"n\">Foo</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">bar</span><span class=\"o\">=</span><span class=\"s2\">&quot;Test&quot;</span><span class=\"p\">)</span>\n        <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test1</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Some test using self.foo</span>\n        <span class=\"o\">...</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test2</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Some other test using self.foo</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n<p>Observera att om testerna körs på en databas utan transaktionsstöd (t.ex. MySQL med MyISAM-motorn) kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">setUpTestData()</span></code> att anropas före varje test, vilket upphäver hastighetsfördelarna.</p>\n<p>Objects assigned to class attributes in <code class=\"docutils literal notranslate\"><span class=\"pre\">setUpTestData()</span></code> must support\ncreating deep copies with <a class=\"reference external\" href=\"https://docs.python.org/3/library/copy.html#copy.deepcopy\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">copy.deepcopy()</span></code></a> in order to isolate them\nfrom alterations performed by each test methods.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.TestCase.captureOnCommitCallbacks\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">classmethod</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">TestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">captureOnCommitCallbacks</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">DEFAULT_DB_ALIAS</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">execute</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.TestCase.captureOnCommitCallbacks\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Returnerar en kontexthanterare som fångar upp <a class=\"reference internal\" href=\"/sv/6.1/topics/db/transactions/#django.db.transaction.on_commit\" title=\"django.db.transaction.on_commit\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">transaction.on_commit()</span></code></a> callbacks för den angivna databasanslutningen. Den returnerar en lista som innehåller, vid avslutning av kontexten, de fångade återuppringningsfunktionerna. Från den här listan kan du göra påståenden om återuppringningarna eller anropa dem för att åberopa deras sidoeffekter, vilket emulerar en commit.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code> är aliaset för den databasanslutning för vilken återuppringningar ska registreras.</p>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">execute</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> kommer alla callbacks att anropas när kontexthanteraren avslutas, om inget undantag inträffade. Detta emulerar en commit efter det omslutna kodblocket.</p>\n<p>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.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">mail</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\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ContactTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_post</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">captureOnCommitCallbacks</span><span class=\"p\">(</span><span class=\"n\">execute</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">callbacks</span><span class=\"p\">:</span>\n            <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span>\n                <span class=\"s2\">&quot;/contact/&quot;</span><span class=\"p\">,</span>\n                <span class=\"p\">{</span><span class=\"s2\">&quot;message&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;I like your site&quot;</span><span class=\"p\">},</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">callbacks</span><span class=\"p\">),</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">),</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">subject</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Contact Form&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">body</span><span class=\"p\">,</span> <span class=\"s2\">&quot;I like your site&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"liveservertestcase\">\n<span id=\"live-test-server\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code><a class=\"heading-anchor\" href=\"#liveservertestcase\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.LiveServerTestCase\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">LiveServerTestCase</span></span><a class=\"heading-anchor\" href=\"#django.test.LiveServerTestCase\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code> gör i princip samma sak som <a class=\"reference internal\" href=\"#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a> med en extra funktion: den startar en live Django-server i bakgrunden vid installationen och stänger av den vid nedmonteringen. Detta gör det möjligt att använda andra automatiserade testklienter än <a class=\"reference internal\" href=\"#test-client\"><span class=\"std std-ref\">Django dummy client</span></a> som till exempel <a class=\"reference external\" href=\"https://www.selenium.dev/\">Selenium</a>-klienten, för att utföra en serie funktionella tester i en webbläsare och simulera en riktig användares handlingar.</p>\n<p>Live-servern lyssnar på <code class=\"docutils literal notranslate\"><span class=\"pre\">localhost</span></code> och binder till port 0 som använder en fri port som tilldelas av operativsystemet. Serverns URL kan nås med <code class=\"docutils literal notranslate\"><span class=\"pre\">self.live_server_url</span></code> under testerna.</p>\n<p>För att visa hur man använder <code class=\"docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code>, låt oss skriva ett Selenium-test. Först och främst måste du installera paketet <a class=\"extlink-pypi reference external\" href=\"https://pypi.org/project/selenium/\">selenium</a>:</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>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span><span class=\"s2\">&quot;selenium &gt;= 4.23.0&quot;</span>\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> py -m pip install <span class=\"s2\">&quot;selenium &gt;= 4.23.0&quot;</span>\n</code></pre></div></div></div>\n<p>Lägg sedan till ett <code class=\"docutils literal notranslate\"><span class=\"pre\">LiveServerTestCase</span></code>-baserat test i din apps testmodul (till exempel: <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp/tests.py</span></code>). I det här exemplet antar vi att du använder <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code></a>-appen och vill ha statiska filer serverade under körningen av dina tester liknande det vi får vid utvecklingstid med <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG=True</span></code>, dvs. utan att behöva samla in dem med <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a>. Vi kommer att använda <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/staticfiles/#django.contrib.staticfiles.testing.StaticLiveServerTestCase\" title=\"django.contrib.staticfiles.testing.StaticLiveServerTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">StaticLiveServerTestCase</span></code></a> subklassen som tillhandahåller den funktionaliteten. Ersätt den med <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.LiveServerTestCase</span></code> om du inte behöver det.</p>\n<p>Koden för detta test kan se ut på följande sätt:</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.contrib.staticfiles.testing</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">StaticLiveServerTestCase</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">selenium.webdriver.common.by</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">By</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">selenium.webdriver.firefox.webdriver</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">WebDriver</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MySeleniumTests</span><span class=\"p\">(</span><span class=\"n\">StaticLiveServerTestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">fixtures</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;user-data.json&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setUpClass</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">setUpClass</span><span class=\"p\">()</span>\n        <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">selenium</span> <span class=\"o\">=</span> <span class=\"n\">WebDriver</span><span class=\"p\">()</span>\n        <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">implicitly_wait</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@classmethod</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">tearDownClass</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n        <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">quit</span><span class=\"p\">()</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">tearDownClass</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login</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=\"sa\">f</span><span class=\"s2\">&quot;</span><span class=\"si\">{</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">live_server_url</span><span class=\"si\">}</span><span class=\"s2\">/login/&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">username_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">find_element</span><span class=\"p\">(</span><span class=\"n\">By</span><span class=\"o\">.</span><span class=\"n\">NAME</span><span class=\"p\">,</span> <span class=\"s2\">&quot;username&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">username_input</span><span class=\"o\">.</span><span class=\"n\">send_keys</span><span class=\"p\">(</span><span class=\"s2\">&quot;myuser&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">password_input</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">find_element</span><span class=\"p\">(</span><span class=\"n\">By</span><span class=\"o\">.</span><span class=\"n\">NAME</span><span class=\"p\">,</span> <span class=\"s2\">&quot;password&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">password_input</span><span class=\"o\">.</span><span class=\"n\">send_keys</span><span class=\"p\">(</span><span class=\"s2\">&quot;secret&quot;</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\">find_element</span><span class=\"p\">(</span><span class=\"n\">By</span><span class=\"o\">.</span><span class=\"n\">XPATH</span><span class=\"p\">,</span> <span class=\"s1\">&#39;//input[@value=&quot;Log in&quot;]&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">click</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Slutligen kan du köra testet 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-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>./manage.py<span class=\"w\"> </span><span class=\"nb\">test</span><span class=\"w\"> </span>myapp.tests.MySeleniumTests.test_login\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> manage.py test myapp.tests.MySeleniumTests.test_login\n</code></pre></div></div></div>\n<p>Detta exempel kommer automatiskt att öppna Firefox och sedan gå till inloggningssidan, ange inloggningsuppgifterna och trycka på knappen ”Logga in”. Selenium erbjuder andra drivrutiner om du inte har Firefox installerat eller vill använda en annan webbläsare. Exemplet ovan är bara en liten bråkdel av vad Selenium-klienten kan göra; kolla in <a class=\"reference external\" href=\"https://selenium-python.readthedocs.io/api.html\">full reference</a> för mer information.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>När man använder en SQLite-databas i minnet för att köra testerna kommer samma databasanslutning att delas av två parallella trådar: den tråd i vilken live-servern körs och den tråd i vilken testfallet körs. Det är viktigt att förhindra samtidiga databasfrågor via denna delade anslutning av de två trådarna, eftersom det ibland slumpmässigt kan leda till att testerna misslyckas. Du måste alltså se till att de två trådarna inte kommer åt databasen samtidigt. I synnerhet innebär detta att du i vissa fall (t.ex. strax efter att du har klickat på en länk eller skickat in ett formulär) kan behöva kontrollera att Selenium får ett svar och att nästa sida laddas innan du fortsätter med ytterligare testkörning. Det gör du t.ex. genom att låta Selenium vänta tills HTML-taggen <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;body&gt;</span></code> hittas i svaret (kräver Selenium &gt; 2.13):</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=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">selenium.webdriver.support.wait</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">WebDriverWait</span>\n\n    <span class=\"n\">timeout</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n    <span class=\"o\">...</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"o\">.</span><span class=\"n\">find_element</span><span class=\"p\">(</span><span class=\"n\">By</span><span class=\"o\">.</span><span class=\"n\">XPATH</span><span class=\"p\">,</span> <span class=\"s1\">&#39;//input[@value=&quot;Log in&quot;]&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">click</span><span class=\"p\">()</span>\n    <span class=\"c1\"># Wait until the response is received</span>\n    <span class=\"n\">WebDriverWait</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">selenium</span><span class=\"p\">,</span> <span class=\"n\">timeout</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">until</span><span class=\"p\">(</span>\n        <span class=\"k\">lambda</span> <span class=\"n\">driver</span><span class=\"p\">:</span> <span class=\"n\">driver</span><span class=\"o\">.</span><span class=\"n\">find_element</span><span class=\"p\">(</span><span class=\"n\">By</span><span class=\"o\">.</span><span class=\"n\">TAG_NAME</span><span class=\"p\">,</span> <span class=\"s2\">&quot;body&quot;</span><span class=\"p\">)</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n<p>Det knepiga här är att det egentligen inte finns något sådant som en ”sidladdning”, särskilt i moderna webbappar som genererar HTML dynamiskt efter att servern har genererat det ursprungliga dokumentet. Så att kontrollera om <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;body&gt;</span></code> finns i svaret är inte nödvändigtvis lämpligt för alla användningsfall. Mer information finns i <a class=\"reference external\" href=\"https://web.archive.org/web/20160129132110/http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions#Q:_WebDriver_fails_to_find_elements_/_Does_not_block_on_page_loa\">Selenium FAQ</a> och <a class=\"reference external\" href=\"https://www.selenium.dev/documentation/webdriver/waits/#explicit-waits\">Selenium documentation</a>.</p>\n</aside>\n</section>\n</section>\n<section id=\"test-cases-features\">\n<h2>Testfall funktioner<a class=\"heading-anchor\" href=\"#test-cases-features\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"default-test-client\">\n<h3>Standard testklient<a class=\"heading-anchor\" href=\"#default-test-client\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.client\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">client</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.client\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.async_client\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">async_client</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.async_client\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Every <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.*TestCase</span></code> instance has access to Django’s synchronous\nand asynchronous test clients as <code class=\"docutils literal notranslate\"><span class=\"pre\">self.client</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">self.async_client</span></code>,\nrespectively. Both clients are recreated for each test, so you don’t have to\nworry about state (such as cookies) carrying over from one test to another.</p>\n<p>For example, rather than instantiating a <code class=\"docutils literal notranslate\"><span class=\"pre\">Client</span></code> in each test:</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\">import</span><span class=\"w\"> </span><span class=\"nn\">unittest</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\">Client</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SimpleTest</span><span class=\"p\">(</span><span class=\"n\">unittest</span><span class=\"o\">.</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_details</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/details/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">client</span> <span class=\"o\">=</span> <span class=\"n\">Client</span><span class=\"p\">()</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/index/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>…kan du hänvisa till <code class=\"docutils literal notranslate\"><span class=\"pre\">self.client</span></code>, så här:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SimpleTest</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_details</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/details/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_index</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customer/index/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"customizing-the-test-client\">\n<h3>Anpassning av testklienten<a class=\"heading-anchor\" href=\"#customizing-the-test-client\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.client_class\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">client_class</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.client_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.async_client_class\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">async_client_class</span></span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.async_client_class\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>If you want to use a different <a class=\"reference internal\" href=\"#django.test.Client\" title=\"django.test.Client\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Client</span></code></a> or <a class=\"reference internal\" href=\"#django.test.AsyncClient\" title=\"django.test.AsyncClient\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AsyncClient</span></code></a> class\n(for example, a subclass with customized behavior), use the\n<a class=\"reference internal\" href=\"#django.test.SimpleTestCase.client_class\" title=\"django.test.SimpleTestCase.client_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">client_class</span></code></a> or\n<a class=\"reference internal\" href=\"#django.test.SimpleTestCase.async_client_class\" title=\"django.test.SimpleTestCase.async_client_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">async_client_class</span></code></a> class attributes.</p>\n<p>For example, to customize the synchronous test client:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Client</span><span class=\"p\">,</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTestClient</span><span class=\"p\">(</span><span class=\"n\">Client</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Specialized methods for your environment</span>\n    <span class=\"o\">...</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTest</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">client_class</span> <span class=\"o\">=</span> <span class=\"n\">MyTestClient</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_my_stuff</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Here self.client is an instance of MyTestClient...</span>\n        <span class=\"n\">call_some_test_code</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>The same pattern applies to the asynchronous test client by subclassing\n<a class=\"reference internal\" href=\"#django.test.AsyncClient\" title=\"django.test.AsyncClient\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AsyncClient</span></code></a> and setting <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.async_client_class\" title=\"django.test.SimpleTestCase.async_client_class\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">async_client_class</span></code></a>.</p>\n</section>\n<section id=\"fixture-loading\">\n<span id=\"topics-testing-fixtures\"></span><h3>Lastning av fixtur<a class=\"heading-anchor\" href=\"#fixture-loading\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase.fixtures\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TransactionTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">fixtures</span></span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase.fixtures\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>En testfallsklass för en databasbaserad webbplats är inte till någon större nytta om det inte finns några data i databasen. Tester är mer läsbara och det är mer underhållbart att skapa objekt med hjälp av ORM, till exempel i <a class=\"reference internal\" href=\"#django.test.TestCase.setUpTestData\" title=\"django.test.TestCase.setUpTestData\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">TestCase.setUpTestData()</span></code></a>, men du kan också använda <a class=\"reference internal\" href=\"/sv/6.1/topics/db/fixtures/#fixtures-explanation\"><span class=\"std std-ref\">fixtures</span></a>.</p>\n<p>En fixtur är en samling data som Django vet hur man importerar till en databas. Om din webbplats till exempel har användarkonton kan du skapa en fixtur med falska användarkonton för att fylla på din databas under tester.</p>\n<p>Det enklaste sättet att skapa en fixtur är att använda kommandot <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">manage.py</span> <span class=\"pre\">dumpdata</span></code></a>. Detta förutsätter att du redan har en del data i din databas. Se <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-dumpdata\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">dumpdata</span> <span class=\"pre\">documentation</span></code></a> för mer information.</p>\n<p>När du har skapat en fixtur och placerat den i en <code class=\"docutils literal notranslate\"><span class=\"pre\">fixtures</span></code> katalog i en av dina <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, kan du använda den i dina enhetstester genom att ange ett <code class=\"docutils literal notranslate\"><span class=\"pre\">fixtures</span></code> klassattribut på din <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.test.TestCase</span></code></a> subclass:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Animal</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">AnimalTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">fixtures</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;mammals.json&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;birds&quot;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setUp</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Test definitions as before.</span>\n        <span class=\"n\">call_setup_methods</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_fluffy_animals</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># A test that uses the fixtures.</span>\n        <span class=\"n\">call_some_test_code</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Det här är vad som kommer att hända i detalj:</p>\n<ul class=\"simple\">\n<li><p>Under <code class=\"docutils literal notranslate\"><span class=\"pre\">setUpClass()</span></code> installeras alla namngivna fixturer. I det här exemplet kommer Django att installera alla JSON-fixturer med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">mammals</span></code>, följt av alla fixturer med namnet <code class=\"docutils literal notranslate\"><span class=\"pre\">birds</span></code>. Se ämnet <a class=\"reference internal\" href=\"/sv/6.1/topics/db/fixtures/#fixtures-explanation\"><span class=\"std std-ref\">Fixturer</span></a> för mer information om hur man definierar och installerar fixturer.</p></li>\n</ul>\n<p>För de flesta enhetstester som använder <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a> behöver Django inte göra något annat, eftersom transaktioner används för att rensa databasen efter varje test av prestandaskäl. Men för <a class=\"reference internal\" href=\"#django.test.TransactionTestCase\" title=\"django.test.TransactionTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TransactionTestCase</span></code></a> kommer följande åtgärder att äga rum:</p>\n<ul class=\"simple\">\n<li><p>I slutet av varje test kommer Django att spola databasen, vilket återställer databasen till det tillstånd den befann sig i direkt efter att <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> anropades.</p></li>\n<li><p>För varje efterföljande test kommer fixturerna att laddas om innan <code class=\"docutils literal notranslate\"><span class=\"pre\">setUp()</span></code> körs.</p></li>\n</ul>\n<p>I vilket fall som helst kan du vara säker på att resultatet av ett test inte kommer att påverkas av ett annat test eller av ordningen på testgenomförandet.</p>\n<p>Som standard laddas fixturer endast in i databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>. Om du använder flera databaser och anger <a class=\"reference internal\" href=\"#django.test.TransactionTestCase.databases\" title=\"django.test.TransactionTestCase.databases\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">TransactionTestCase.databases</span></code></a> kommer fixturer att laddas i alla angivna databaser.</p>\n</section>\n<section id=\"urlconf-configuration\">\n<h3>URLconf-konfiguration<a class=\"heading-anchor\" href=\"#urlconf-configuration\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om din applikation innehåller vyer kanske du vill inkludera tester som använder testklienten för att aktivera dessa vyer. Det står dock en slutanvändare fritt att distribuera vyerna i din applikation till vilken URL som helst. Detta innebär att dina tester inte kan förlita sig på att dina vyer kommer att finnas tillgängliga på en viss URL. Dekorera din testklass eller testmetod med <code class=\"docutils literal notranslate\"><span class=\"pre\">&#64;override_settings(ROOT_URLCONF=...)</span></code> för URLconf-konfiguration.</p>\n</section>\n<section id=\"multi-database-support\">\n<span id=\"testing-multi-db\"></span><h3>Stöd för flera databaser<a class=\"heading-anchor\" href=\"#multi-database-support\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase.databases\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TransactionTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">databases</span></span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase.databases\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Django skapar en testdatabas som motsvarar varje databas som definieras i <code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASER</span></code>-definitionen i dina inställningar och som minst ett test hänvisar till via <code class=\"docutils literal notranslate\"><span class=\"pre\">databaser</span></code>.</p>\n<p>En stor del av den tid det tar att köra ett Django <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> förbrukas dock av anropet till <code class=\"docutils literal notranslate\"><span class=\"pre\">flush</span></code> som säkerställer att du har en ren databas i slutet av varje testkörning. Om du har flera databaser krävs flera spolningar (en för varje databas), vilket kan vara en tidskrävande aktivitet - särskilt om dina tester inte behöver testa aktivitet i flera databaser.</p>\n<p>Som en optimering spolar Django bara databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> i slutet av varje testkörning. Om din installation innehåller flera databaser och du har ett test som kräver att alla databaser är rena, kan du använda attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">databaser</span></code> på testsviten för att begära att extra databaser spolas.</p>\n<p>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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">TestMyViews</span><span class=\"p\">(</span><span class=\"n\">TransactionTestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">databases</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;default&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;other&quot;</span><span class=\"p\">}</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_index_page_view</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">call_some_test_code</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Denna testfallsklass kommer att rensa testdatabaserna <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">other</span></code> efter att ha kört <code class=\"docutils literal notranslate\"><span class=\"pre\">test_index_page_view</span></code>. Du kan också använda <code class=\"docutils literal notranslate\"><span class=\"pre\">'__all__'</span></code> för att ange att alla testdatabaser måste rensas.</p>\n<p>Flaggan <code class=\"docutils literal notranslate\"><span class=\"pre\">databases</span></code> styr också vilka databaser som <a class=\"reference internal\" href=\"#django.test.TransactionTestCase.fixtures\" title=\"django.test.TransactionTestCase.fixtures\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">TransactionTestCase.fixtures</span></code></a> laddas in i. Som standard laddas fixturerna endast in i databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>.</p>\n<p>Frågor mot databaser som inte finns i <code class=\"docutils literal notranslate\"><span class=\"pre\">databaser</span></code> kommer att ge assertionfel för att förhindra att tillstånd läcker mellan tester.</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.test.TestCase.databases\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">databases</span></span><a class=\"heading-anchor\" href=\"#django.test.TestCase.databases\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Som standard kommer endast <code class=\"docutils literal notranslate\"><span class=\"pre\">standard</span></code>-databasen att omslutas av en transaktion under exekveringen av ett <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> och försök att fråga andra databaser kommer att resultera i assertionfel för att förhindra att tillstånd läcker mellan tester.</p>\n<p>Använd klassattributet <code class=\"docutils literal notranslate\"><span class=\"pre\">databases</span></code> på testklassen för att begära transaktionsomslag mot databaser som inte är <code class=\"docutils literal notranslate\"><span class=\"pre\">standard</span></code>.</p>\n<p>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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">OtherDBTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"n\">databases</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s2\">&quot;other&quot;</span><span class=\"p\">}</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_other_db_query</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Detta test tillåter endast frågor mot databasen <code class=\"docutils literal notranslate\"><span class=\"pre\">other</span></code>. Precis som för <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.databases\" title=\"django.test.SimpleTestCase.databases\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">SimpleTestCase.databases</span></code></a> och <a class=\"reference internal\" href=\"#django.test.TransactionTestCase.databases\" title=\"django.test.TransactionTestCase.databases\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">TransactionTestCase.databases</span></code></a> kan konstanten <code class=\"docutils literal notranslate\"><span class=\"pre\">'__all__'</span></code> användas för att ange att testet ska tillåta frågor till alla databaser.</p>\n</section>\n<section id=\"overriding-settings\">\n<span id=\"id1\"></span><h3>Åsidosätta inställningar<a class=\"heading-anchor\" href=\"#overriding-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Använd funktionerna nedan för att tillfälligt ändra värdet på inställningar i tester. Manipulera inte <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.settings</span></code> direkt eftersom Django inte kommer att återställa de ursprungliga värdena efter sådana manipulationer.</p>\n</aside>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.settings\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">settings</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.settings\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>For testing purposes it’s often useful to change a setting temporarily and\nrevert to the original value after running the testing code. For this use case\nDjango provides a standard <a class=\"reference external\" href=\"https://docs.python.org/3/reference/datamodel.html#context-managers\" title=\"(in Python v3.14)\"><span class=\"xref std std-ref\">context manager</span></a> called\n<a class=\"reference internal\" href=\"#django.test.SimpleTestCase.settings\" title=\"django.test.SimpleTestCase.settings\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">settings()</span></code></a>, which can be used like this:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LoginTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># First check for the default behavior</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/sekrit/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRedirects</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"p\">,</span> <span class=\"s2\">&quot;/accounts/login/?next=/sekrit/&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Then override the LOGIN_URL setting</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">settings</span><span class=\"p\">(</span><span class=\"n\">LOGIN_URL</span><span class=\"o\">=</span><span class=\"s2\">&quot;/other/login/&quot;</span><span class=\"p\">):</span>\n            <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/sekrit/&quot;</span><span class=\"p\">)</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRedirects</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"p\">,</span> <span class=\"s2\">&quot;/other/login/?next=/sekrit/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Detta exempel åsidosätter inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-LOGIN_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">LOGIN_URL</span></code></a> för koden i <code class=\"docutils literal notranslate\"><span class=\"pre\">with</span></code>-blocket och återställer dess värde till det tidigare tillståndet efteråt.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.modify_settings\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">modify_settings</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.modify_settings\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Det kan vara krångligt att omdefiniera inställningar som innehåller en lista med värden. I praktiken är det ofta tillräckligt att lägga till eller ta bort värden. Django tillhandahåller kontexthanteraren <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.modify_settings\" title=\"django.test.SimpleTestCase.modify_settings\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">modify_settings()</span></code></a> för enklare ändringar av inställningar:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MiddlewareTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_cache_middleware</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">modify_settings</span><span class=\"p\">(</span>\n            <span class=\"n\">MIDDLEWARE</span><span class=\"o\">=</span><span class=\"p\">{</span>\n                <span class=\"s2\">&quot;append&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.FetchFromCacheMiddleware&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;prepend&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.UpdateCacheMiddleware&quot;</span><span class=\"p\">,</span>\n                <span class=\"s2\">&quot;remove&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span>\n                    <span class=\"s2\">&quot;django.contrib.sessions.middleware.SessionMiddleware&quot;</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;django.contrib.auth.middleware.AuthenticationMiddleware&quot;</span><span class=\"p\">,</span>\n                    <span class=\"s2\">&quot;django.contrib.messages.middleware.MessageMiddleware&quot;</span><span class=\"p\">,</span>\n                <span class=\"p\">],</span>\n            <span class=\"p\">}</span>\n        <span class=\"p\">):</span>\n            <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n            <span class=\"c1\"># ...</span>\n</code></pre></div>\n<p>För varje åtgärd kan du ange antingen en lista med värden eller en sträng. När värdet redan finns i listan har <code class=\"docutils literal notranslate\"><span class=\"pre\">append</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">prepend</span></code> ingen effekt; det har inte heller <code class=\"docutils literal notranslate\"><span class=\"pre\">remove</span></code> när värdet inte finns.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.override_settings\">\n<span class=\"sig-name descname\"><span class=\"pre\">override_settings</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\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.override_settings\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>In case you want to override a setting for a test method, Django provides the\n<a class=\"reference internal\" href=\"#django.test.override_settings\" title=\"django.test.override_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">override_settings()</span></code></a> <a class=\"reference external\" href=\"https://docs.python.org/3/glossary.html#term-decorator\" title=\"(in Python v3.14)\"><span>decorator</span></a>:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span><span class=\"p\">,</span> <span class=\"n\">override_settings</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LoginTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@override_settings</span><span class=\"p\">(</span><span class=\"n\">LOGIN_URL</span><span class=\"o\">=</span><span class=\"s2\">&quot;/other/login/&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/sekrit/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRedirects</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"p\">,</span> <span class=\"s2\">&quot;/other/login/?next=/sekrit/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Dekoratorn kan också tillämpas på <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a>-klasser:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span><span class=\"p\">,</span> <span class=\"n\">override_settings</span>\n\n\n<span class=\"nd\">@override_settings</span><span class=\"p\">(</span><span class=\"n\">LOGIN_URL</span><span class=\"o\">=</span><span class=\"s2\">&quot;/other/login/&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">LoginTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_login</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/sekrit/&quot;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRedirects</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"p\">,</span> <span class=\"s2\">&quot;/other/login/?next=/sekrit/&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.modify_settings\">\n<span class=\"sig-name descname\"><span class=\"pre\">modify_settings</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\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.modify_settings\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>På samma sätt tillhandahåller Django dekoratorn <a class=\"reference internal\" href=\"#django.test.modify_settings\" title=\"django.test.modify_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modify_settings()</span></code></a>:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span><span class=\"p\">,</span> <span class=\"n\">modify_settings</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MiddlewareTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@modify_settings</span><span class=\"p\">(</span>\n        <span class=\"n\">MIDDLEWARE</span><span class=\"o\">=</span><span class=\"p\">{</span>\n            <span class=\"s2\">&quot;append&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.FetchFromCacheMiddleware&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;prepend&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.UpdateCacheMiddleware&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_cache_middleware</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n        <span class=\"c1\"># ...</span>\n</code></pre></div>\n<p>Dekoratorn kan också tillämpas på testfallsklasser:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestCase</span><span class=\"p\">,</span> <span class=\"n\">modify_settings</span>\n\n\n<span class=\"nd\">@modify_settings</span><span class=\"p\">(</span>\n    <span class=\"n\">MIDDLEWARE</span><span class=\"o\">=</span><span class=\"p\">{</span>\n        <span class=\"s2\">&quot;append&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.FetchFromCacheMiddleware&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;prepend&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.middleware.cache.UpdateCacheMiddleware&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MiddlewareTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_cache_middleware</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/&quot;</span><span class=\"p\">)</span>\n        <span class=\"c1\"># ...</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>När de får en klass modifierar dessa dekoratorer klassen direkt och returnerar den; de skapar inte och returnerar en modifierad kopia av den. Så om du försöker justera ovanstående exempel för att tilldela returvärdet ett annat namn än <code class=\"docutils literal notranslate\"><span class=\"pre\">LoginTestCase</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">MiddlewareTestCase</span></code>, kan du bli förvånad över att upptäcka att de ursprungliga testfallsklasserna fortfarande påverkas lika mycket av dekoratorn. För en given klass tillämpas <a class=\"reference internal\" href=\"#django.test.modify_settings\" title=\"django.test.modify_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modify_settings()</span></code></a> alltid efter <a class=\"reference internal\" href=\"#django.test.override_settings\" title=\"django.test.override_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">override_settings()</span></code></a>.</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Inställningsfilen innehåller vissa inställningar som endast konsulteras under initialisering av Django internals. Om du ändrar dem med <code class=\"docutils literal notranslate\"><span class=\"pre\">override_settings</span></code> ändras inställningen om du kommer åt den via modulen <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.settings</span></code>, men Djangos internals kommer åt den på ett annat sätt. Att använda <a class=\"reference internal\" href=\"#django.test.override_settings\" title=\"django.test.override_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">override_settings()</span></code></a> eller <a class=\"reference internal\" href=\"#django.test.modify_settings\" title=\"django.test.modify_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">modify_settings()</span></code></a> med dessa inställningar kommer förmodligen inte att göra vad du förväntar dig att det ska göra.</p>\n<p>Vi rekommenderar inte att du ändrar inställningen <code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DATABASER</span></code>. Det är möjligt att ändra inställningen <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>, men det är lite knepigt om du använder interna funktioner som använder cachelagring, som <a class=\"reference internal\" href=\"/sv/6.1/topics/http/sessions/#module-django.contrib.sessions\" title=\"django.contrib.sessions: Provides session management for Django projects.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.contrib.sessions</span></code></a>. Du måste till exempel initiera sessionsbackend på nytt i ett test som använder cachade sessioner och åsidosätter <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>.</p>\n<p>Slutligen bör du undvika att använda dina inställningar som konstanter på modulnivå eftersom <code class=\"docutils literal notranslate\"><span class=\"pre\">override_settings()</span></code> inte fungerar på sådana värden eftersom de bara utvärderas första gången modulen importeras.</p>\n</aside>\n<p>Du kan också simulera att en inställning inte finns genom att radera den efter att inställningarna har åsidosatts, så här:</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=\"nd\">@override_settings</span><span class=\"p\">()</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_something</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"k\">del</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">LOGIN_URL</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>När du åsidosätter inställningar måste du se till att hantera de fall där din appkod använder en cache eller liknande funktion som behåller tillståndet även om inställningen ändras. Django tillhandahåller <a class=\"reference internal\" href=\"/sv/6.1/ref/signals/#django.test.signals.setting_changed\" title=\"django.test.signals.setting_changed\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">django.test.signals.setting_changed</span></code></a>-signalen som låter dig registrera återuppringningar för att städa upp och på annat sätt återställa tillståndet när inställningarna ändras.</p>\n<p>Django själv använder denna signal för att återställa olika data:</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>Åsidosatta inställningar</p></th>\n<th class=\"head\"><p>Återställning av data</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p>ANVÄNDNING_TZ, TIDSZON</p></td>\n<td><p>Tidszon för databaser</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>TEMPLAT</p></td>\n<td><p>Mall för motorer</p></td>\n</tr>\n<tr class=\"row-even\"><td><p>FORM_RENDERER</p></td>\n<td><p>Standardrenderare</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>SERIALISERING_MODULER</p></td>\n<td><p>Serialisatorer cache</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><a href=\"#id5\"><span class=\"problematic\" id=\"id6\">LOKALA_</span></a> SÖKVÄGAR, SPRÅKKOD</p></td>\n<td><p>Standardöversättning och inlästa översättningar</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p>STATIC_ROOT, STATIC_URL, LAGRING</p></td>\n<td><p>Konfiguration av lagringsutrymmen</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n<section id=\"isolating-apps\">\n<h3>Isolera appar<a class=\"heading-anchor\" href=\"#isolating-apps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\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\">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><p>Registrerar de modeller som definieras i en omsluten kontext i sitt eget isolerade <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>-register. Denna funktion är användbar när du skapar modellklasser för tester, eftersom klasserna kommer att raderas rent efteråt och det inte finns någon risk för namnkollisioner.</p>\n<p>De appetiketter som det isolerade registret ska innehålla måste skickas som enskilda argument. Du kan använda <code class=\"docutils literal notranslate\"><span class=\"pre\">isolate_apps()</span></code> som en dekorator eller en kontexthanterare. 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.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\">MyModelTests</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<p>… eller:</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=\"k\">with</span> <span class=\"n\">isolate_apps</span><span class=\"p\">(</span><span class=\"s2\">&quot;app_label&quot;</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\">pass</span>\n\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>Dekoratorformen kan också tillämpas på klasser.</p>\n<p>Två valfria nyckelordsargument kan anges:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">attr_name</span></code>: attribut som tilldelas det isolerade registret om det används som en klassdekorator.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">kwarg_name</span></code>: nyckelordsargument som skickar det isolerade registret om det används som en funktionsdekorator.</p></li>\n</ul>\n<p>Den tillfälliga instansen <code class=\"docutils literal notranslate\"><span class=\"pre\">Apps</span></code> som används för att isolera modellregistreringen kan hämtas som ett attribut när den används som en klassdekorator genom att använda parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">attr_name</span></code>:</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=\"nd\">@isolate_apps</span><span class=\"p\">(</span><span class=\"s2\">&quot;app_label&quot;</span><span class=\"p\">,</span> <span class=\"n\">attr_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;apps&quot;</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\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=\"s2\">&quot;app_label&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;TestModel&quot;</span><span class=\"p\">),</span> <span class=\"n\">TestModel</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>… eller alternativt som ett argument på testmetoden när den används som en metoddekorator genom att använda parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">kwarg_name</span></code>:</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=\"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=\"n\">kwarg_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;apps&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> <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\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=\"s2\">&quot;app_label&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;TestModel&quot;</span><span class=\"p\">),</span> <span class=\"n\">TestModel</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"emptying-the-test-outbox\">\n<span id=\"emptying-test-outbox\"></span><h3>Tömning av testboxen<a class=\"heading-anchor\" href=\"#emptying-the-test-outbox\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Om du använder någon av Djangos anpassade <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code>-klasser kommer testlöparen att rensa innehållet i test-e-postens utkorg i början av varje testfall.</p>\n<p>För mer information om e-posttjänster under tester, se E-posttjänster nedan.</p>\n</section>\n<section id=\"assertions\">\n<span id=\"id2\"></span><h3>Påståenden<a class=\"heading-anchor\" href=\"#assertions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Precis som Pythons normala klass <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">unittest.TestCase</span></code></a> implementerar assertion-metoder som <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertTrue\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertTrue()</span></code></a> och <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertEqual\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertEqual()</span></code></a>, tillhandahåller Djangos anpassade klass <a class=\"reference internal\" href=\"#django.test.TestCase\" title=\"django.test.TestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TestCase</span></code></a> ett antal anpassade assertion-metoder som är användbara för att testa webbapplikationer:</p>\n<p>De felmeddelanden som ges av de flesta av dessa assertion-metoder kan anpassas med argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">msg_prefix</span></code>. Denna sträng kommer att prefixeras till alla felmeddelanden som genereras av påståendet. Detta gör att du kan ge ytterligare information som kan hjälpa dig att identifiera platsen för och orsaken till ett fel i din testsvit.</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertRaisesMessage\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertRaisesMessage</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_exception</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_message</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">callable</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertRaisesMessage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dt class=\"sig sig-object py\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertRaisesMessage</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_exception</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_message</span></span></em><span class=\"sig-paren\">)</span></dt>\n<dd><p>Säger att exekvering av <code class=\"docutils literal notranslate\"><span class=\"pre\">callable</span></code> ger upphov till <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_exception</span></code> och att <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_message</span></code> finns i undantagets meddelande. Alla andra resultat rapporteras som ett misslyckande. Det är en enklare version av <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaisesRegex\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">unittest.TestCase.assertRaisesRegex()</span></code></a> med skillnaden att <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_message</span></code> inte behandlas som ett reguljärt uttryck.</p>\n<p>Om endast parametrarna <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_exception</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_message</span></code> anges, returneras en kontexthanterare så att den kod som testas kan skrivas inline i stället för som en funktion:</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=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertRaisesMessage</span><span class=\"p\">(</span><span class=\"ne\">ValueError</span><span class=\"p\">,</span> <span class=\"s2\">&quot;invalid literal for int()&quot;</span><span class=\"p\">):</span>\n    <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"s2\">&quot;a&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertWarnsMessage\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertWarnsMessage</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_warning</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_message</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">callable</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertWarnsMessage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dt class=\"sig sig-object py\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertWarnsMessage</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_warning</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_message</span></span></em><span class=\"sig-paren\">)</span></dt>\n<dd><p>Analogt med <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertRaisesMessage\" title=\"django.test.SimpleTestCase.assertRaisesMessage\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">SimpleTestCase.assertRaisesMessage()</span></code></a> men för <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertWarnsRegex\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertWarnsRegex()</span></code></a> istället för <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.TestCase.assertRaisesRegex\" title=\"(in Python v3.14)\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertRaisesRegex()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertFieldOutput\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertFieldOutput</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fieldclass</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">valid</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">invalid</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field_args</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\">field_kwargs</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\">empty_value</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertFieldOutput\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Försäkrar att ett formulärfält beter sig korrekt med olika inmatningar.</p>\n<dl class=\"field-list simple\">\n<dt class=\"field-odd\">Parametrar<span class=\"colon\">:</span></dt>\n<dd class=\"field-odd\"><ul class=\"simple\">\n<li><p><strong>fieldclass</strong> – klassen för det fält som ska testas.</p></li>\n<li><p><strong>valid</strong> – en ordlista som mappar giltiga indata till deras förväntade rensade värden.</p></li>\n<li><p><strong>invalid</strong> – en ordlista som kopplar ogiltiga indata till ett eller flera felmeddelanden.</p></li>\n<li><p><strong>field_args</strong> – de args som skickas för att instansiera fältet.</p></li>\n<li><p><strong>field_kwargs</strong> – de kwargs som skickas för att instansiera fältet.</p></li>\n<li><p><strong>empty_value</strong> – den förväntade rena utdata för indata i <code class=\"docutils literal notranslate\"><span class=\"pre\">empty_values</span></code>.</p></li>\n</ul>\n</dd>\n</dl>\n<p>Följande kod testar till exempel att en <code class=\"docutils literal notranslate\"><span class=\"pre\">EmailField</span></code> accepterar <code class=\"docutils literal notranslate\"><span class=\"pre\">a&#64;a.com</span></code> som en giltig e-postadress, men avvisar <code class=\"docutils literal notranslate\"><span class=\"pre\">aaa</span></code> med ett rimligt felmeddelande:</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=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertFieldOutput</span><span class=\"p\">(</span>\n    <span class=\"n\">EmailField</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;a@a.com&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;a@a.com&quot;</span><span class=\"p\">},</span> <span class=\"p\">{</span><span class=\"s2\">&quot;aaa&quot;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"s2\">&quot;Enter a valid email address.&quot;</span><span class=\"p\">]}</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertFormError\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertFormError</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">form</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">errors</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertFormError\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Säger att ett fält i ett formulär ger upphov till den angivna listan med fel.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">form</span></code> är en <code class=\"docutils literal notranslate\"><span class=\"pre\">Form</span></code> instans. Formuläret måste vara <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#ref-forms-api-bound-unbound\"><span class=\"std std-ref\">bundet</span></a> men inte nödvändigtvis validerat (<code class=\"docutils literal notranslate\"><span class=\"pre\">assertFormError()</span></code> kommer automatiskt att anropa <code class=\"docutils literal notranslate\"><span class=\"pre\">full_clean()</span></code> på formuläret).</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">field</span></code> är namnet på det fält i formuläret som ska kontrolleras. För att kontrollera formulärets <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#django.forms.Form.non_field_errors\" title=\"django.forms.Form.non_field_errors\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">icke-fältfel</span></code></a>, använd <code class=\"docutils literal notranslate\"><span class=\"pre\">field=None</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">errors</span></code> är en lista med alla felsträngar som fältet förväntas ha. Du kan också skicka en enda felsträng om du bara förväntar dig ett fel, vilket innebär att <code class=\"docutils literal notranslate\"><span class=\"pre\">errors='error</span> <span class=\"pre\">message'</span></code> är detsamma som <code class=\"docutils literal notranslate\"><span class=\"pre\">errors=['error</span> <span class=\"pre\">message']</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertFormSetError\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertFormSetError</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">formset</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">form_index</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">field</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">errors</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertFormSetError\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Säger att <code class=\"docutils literal notranslate\"><span class=\"pre\">formset</span></code> ger upphov till den angivna listan med fel när det renderas.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">formset</span></code> är en instans av <code class=\"docutils literal notranslate\"><span class=\"pre\">FormSet</span></code>. Formsetet måste vara bundet men inte nödvändigtvis validerat (<code class=\"docutils literal notranslate\"><span class=\"pre\">assertFormSetError()</span></code> anropar automatiskt <code class=\"docutils literal notranslate\"><span class=\"pre\">full_clean()</span></code> på formsetet).</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">form_index</span></code> är numret på formuläret i <code class=\"docutils literal notranslate\"><span class=\"pre\">FormSet</span></code> (med början från 0). Använd <code class=\"docutils literal notranslate\"><span class=\"pre\">form_index=None</span></code> för att kontrollera formuläruppsättningens icke-formulärfel, dvs. de fel som du får när du anropar <code class=\"docutils literal notranslate\"><span class=\"pre\">formset.non_form_errors()</span></code>. I så fall måste du också använda <code class=\"docutils literal notranslate\"><span class=\"pre\">field=None</span></code>.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">field</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">errors</span></code> har samma betydelse som parametrarna till <code class=\"docutils literal notranslate\"><span class=\"pre\">assertFormError()</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertContains\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertContains</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">text</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">count</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\">status_code</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">200</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertContains\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Asserts that an <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> produced the\ngiven <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse.status_code\" title=\"django.http.HttpResponse.status_code\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">status_code</span></code></a> and that <code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code>\nappears in its <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse.content\" title=\"django.http.HttpResponse.content\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">content</span></code></a>. If <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code>\nis provided, <code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> must occur exactly <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> times in the response.</p>\n<p>Sätt <code class=\"docutils literal notranslate\"><span class=\"pre\">html</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> för att hantera <code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> som HTML. Jämförelsen med svarsinnehållet kommer att baseras på HTML-semantik i stället för likhet tecken för tecken. Whitespace ignoreras i de flesta fall, attributordning är inte signifikant. Se <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> för mer information.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertNotContains\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertNotContains</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">text</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">status_code</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">200</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertNotContains\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Asserts that an <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> produced the\ngiven <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse.status_code\" title=\"django.http.HttpResponse.status_code\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">status_code</span></code></a> and that <code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> does\n<em>not</em> appear in its <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse.content\" title=\"django.http.HttpResponse.content\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">content</span></code></a>.</p>\n<p>Sätt <code class=\"docutils literal notranslate\"><span class=\"pre\">html</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> för att hantera <code class=\"docutils literal notranslate\"><span class=\"pre\">text</span></code> som HTML. Jämförelsen med svarsinnehållet kommer att baseras på HTML-semantik i stället för likhet tecken för tecken. Whitespace ignoreras i de flesta fall, attributordning är inte signifikant. Se <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> för mer information.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertTemplateUsed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertTemplateUsed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">count</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.SimpleTestCase.assertTemplateUsed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Bekräftar att mallen med det angivna namnet användes vid rendering av svaret.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">response</span></code> must be a <a class=\"reference internal\" href=\"#django.test.Response\" title=\"django.test.Response\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Response</span></code></a> instance returned by\nthe test client.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">template_name</span></code> bör vara en sträng som till exempel <code class=\"docutils literal notranslate\"><span class=\"pre\">'admin/index.html'</span></code>.</p>\n<p>Argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> är ett heltal som anger hur många gånger mallen ska återges. Standard är <code class=\"docutils literal notranslate\"><span class=\"pre\">None</span></code>, vilket innebär att mallen ska återges en eller flera gånger.</p>\n<p>Du kan använda detta som en kontexthanterare, så här:</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=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertTemplateUsed</span><span class=\"p\">(</span><span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">):</span>\n    <span class=\"n\">render_to_string</span><span class=\"p\">(</span><span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertTemplateUsed</span><span class=\"p\">(</span><span class=\"n\">template_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">):</span>\n    <span class=\"n\">render_to_string</span><span class=\"p\">(</span><span class=\"s2\">&quot;index.html&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertTemplateNotUsed\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertTemplateNotUsed</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">template_name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertTemplateNotUsed\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Bekräftar att mallen med det angivna namnet <em>inte</em> användes vid rendering av svaret.</p>\n<p>Du kan använda detta som en kontexthanterare på samma sätt som <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertTemplateUsed\" title=\"django.test.SimpleTestCase.assertTemplateUsed\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertTemplateUsed()</span></code></a>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertURLEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertURLEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">url1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">url2</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertURLEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Påstår att två webbadresser är desamma och ignorerar ordningen på parametrarna i frågesträngen, utom för parametrar med samma namn. Till exempel är <code class=\"docutils literal notranslate\"><span class=\"pre\">/path/?x=1&amp;y=2</span></code> lika med <code class=\"docutils literal notranslate\"><span class=\"pre\">/path/?y=2&amp;x=1</span></code>, men <code class=\"docutils literal notranslate\"><span class=\"pre\">/path/?a=1&amp;a=2</span></code> är inte lika med <code class=\"docutils literal notranslate\"><span class=\"pre\">/path/?a=2&amp;a=1</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertRedirects\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertRedirects</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">response</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_url</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">status_code</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">302</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">target_status_code</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">200</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fetch_redirect_response</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertRedirects\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Asserts that the <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse\" title=\"django.http.HttpResponse\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">HttpResponse</span></code></a> returned a response\nwith a redirect status (based on its\n<a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpResponse.status_code\" title=\"django.http.HttpResponse.status_code\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">status_code</span></code></a>), redirected to\n<code class=\"docutils literal notranslate\"><span class=\"pre\">expected_url</span></code> (including any <code class=\"docutils literal notranslate\"><span class=\"pre\">GET</span></code> data), and that the final response\nwas received with <code class=\"docutils literal notranslate\"><span class=\"pre\">target_status_code</span></code>.</p>\n<p>Om din begäran använde argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">follow</span></code> kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_url</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">target_status_code</span></code> att vara webbadressen och statuskoden för den sista punkten i omdirigeringskedjan.</p>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">fetch_redirect_response</span></code> är <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> kommer den slutliga sidan inte att laddas. Eftersom testklienten inte kan hämta externa webbadresser är detta särskilt användbart om <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_url</span></code> inte är en del av din Django-app.</p>\n<p>Schema hanteras korrekt när jämförelser görs mellan två webbadresser. Om det inte finns något schema angivet på den plats dit vi omdirigeras används den ursprungliga begärans schema. Om det finns, är det schemat i <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_url</span></code> som används för att göra jämförelser.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertHTMLEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertHTMLEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html2</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</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.SimpleTestCase.assertHTMLEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Påstår att strängarna <code class=\"docutils literal notranslate\"><span class=\"pre\">html1</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">html2</span></code> är lika. Jämförelsen är baserad på HTML-semantik. Jämförelsen tar hänsyn till följande saker:</p>\n<ul class=\"simple\">\n<li><p>Mellanslag före och efter HTML-taggar ignoreras.</p></li>\n<li><p>Alla typer av blanksteg betraktas som likvärdiga.</p></li>\n<li><p>Alla öppna taggar stängs implicit, t.ex. när en omgivande tagg stängs eller när HTML-dokumentet avslutas.</p></li>\n<li><p>Tomma taggar är likvärdiga med deras självstängande version.</p></li>\n<li><p>Ordningsföljden på attributen i ett HTML-element är inte viktig.</p></li>\n<li><p>Booleska attribut (t.ex. <code class=\"docutils literal notranslate\"><span class=\"pre\">checked</span></code>) utan argument är lika med attribut som har samma namn och värde (se exemplen).</p></li>\n<li><p>Text-, tecken- och entitetsreferenser som hänvisar till samma tecken är likvärdiga.</p></li>\n</ul>\n<p>Följande exempel är giltiga tester och ger inte upphov till några <code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code>:</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=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertHTMLEqual</span><span class=\"p\">(</span>\n    <span class=\"s2\">&quot;&lt;p&gt;Hello &lt;b&gt;&amp;#x27;world&amp;#x27;!&lt;/p&gt;&quot;</span><span class=\"p\">,</span>\n<span class=\"w\">    </span><span class=\"sd\">&quot;&quot;&quot;&lt;p&gt;</span>\n<span class=\"sd\">        Hello   &lt;b&gt;&amp;#39;world&amp;#39;! &lt;/b&gt;</span>\n<span class=\"sd\">    &lt;/p&gt;&quot;&quot;&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n<span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertHTMLEqual</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;&lt;input type=&quot;checkbox&quot; checked=&quot;checked&quot; id=&quot;id_accept_terms&quot; /&gt;&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;&lt;input id=&quot;id_accept_terms&quot; type=&quot;checkbox&quot; checked&gt;&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">html1</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">html2</span></code> måste innehålla HTML. Ett <code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code> kommer att uppstå om en av dem inte kan tolkas.</p>\n<p>Utdata i händelse av fel kan anpassas med argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertHTMLNotEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertHTMLNotEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">html2</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</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.SimpleTestCase.assertHTMLNotEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Påstår att strängarna <code class=\"docutils literal notranslate\"><span class=\"pre\">html1</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">html2</span></code> är <em>inte</em> lika. Jämförelsen baseras på HTML-semantik. Se <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> för detaljer.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">html1</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">html2</span></code> måste innehålla HTML. Ett <code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code> kommer att uppstå om en av dem inte kan tolkas.</p>\n<p>Utdata i händelse av fel kan anpassas med argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertXMLEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertXMLEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">xml1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">xml2</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</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.SimpleTestCase.assertXMLEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Påstår att strängarna <code class=\"docutils literal notranslate\"><span class=\"pre\">xml1</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">xml2</span></code> är lika. Jämförelsen baseras på XML-semantik. På samma sätt som <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a>, görs jämförelsen på parsat innehåll, vilket innebär att endast semantiska skillnader beaktas, inte syntaxskillnader. När ogiltig XML skickas i någon parameter, uppstår alltid ett <code class=\"docutils literal notranslate\"><span class=\"pre\">AssertionError</span></code>, även om båda strängarna är identiska.</p>\n<p>XML-deklaration, dokumenttyp, bearbetningsinstruktioner och kommentarer ignoreras. Endast rotelementet och dess underordnade element jämförs.</p>\n<p>Utdata i händelse av fel kan anpassas med argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertXMLNotEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertXMLNotEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">xml1</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">xml2</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</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.SimpleTestCase.assertXMLNotEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Påstår att strängarna <code class=\"docutils literal notranslate\"><span class=\"pre\">xml1</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">xml2</span></code> är <em>inte</em> lika. Jämförelsen är baserad på XML-semantik. Se <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertXMLEqual\" title=\"django.test.SimpleTestCase.assertXMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertXMLEqual()</span></code></a> för detaljer.</p>\n<p>Utdata i händelse av fel kan anpassas med argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertInHTML\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertInHTML</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">needle</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">haystack</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">count</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\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertInHTML\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Påstår att HTML-fragmentet <code class=\"docutils literal notranslate\"><span class=\"pre\">needle</span></code> ingår i <code class=\"docutils literal notranslate\"><span class=\"pre\">haystack</span></code> en gång.</p>\n<p>Om heltalsargumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">count</span></code> anges, kommer dessutom antalet förekomster av <code class=\"docutils literal notranslate\"><span class=\"pre\">nålar</span></code> att kontrolleras noggrant.</p>\n<p>I de flesta fall ignoreras blanksteg och attributordningen är inte signifikant. Se <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> för mer information.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertNotInHTML\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertNotInHTML</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">needle</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">haystack</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg_prefix</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">''</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.SimpleTestCase.assertNotInHTML\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Påstår att HTML-fragmentet <code class=\"docutils literal notranslate\"><span class=\"pre\">needle</span></code> <em>inte</em> ingår i <code class=\"docutils literal notranslate\"><span class=\"pre\">haystack</span></code>.</p>\n<p>I de flesta fall ignoreras blanksteg och attributordningen är inte signifikant. Se <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertHTMLEqual\" title=\"django.test.SimpleTestCase.assertHTMLEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertHTMLEqual()</span></code></a> för mer information.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertJSONEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertJSONEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raw</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_data</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</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.SimpleTestCase.assertJSONEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Påstår att JSON-fragmenten <code class=\"docutils literal notranslate\"><span class=\"pre\">raw</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_data</span></code> är lika. Vanliga JSON-regler för icke-signifikanta blanksteg gäller eftersom tungvikten är delegerad till <a class=\"reference external\" href=\"https://docs.python.org/3/library/json.html#module-json\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">json</span></code></a>-biblioteket.</p>\n<p>Utdata i händelse av fel kan anpassas med argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.SimpleTestCase.assertJSONNotEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">SimpleTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertJSONNotEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raw</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">expected_data</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</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.SimpleTestCase.assertJSONNotEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Säger att JSON-fragmenten <code class=\"docutils literal notranslate\"><span class=\"pre\">raw</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">expected_data</span></code> <em>inte</em> är lika. Se <a class=\"reference internal\" href=\"#django.test.SimpleTestCase.assertJSONEqual\" title=\"django.test.SimpleTestCase.assertJSONEqual\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">assertJSONEqual()</span></code></a> för ytterligare detaljer.</p>\n<p>Utdata i händelse av fel kan anpassas med argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase.assertQuerySetEqual\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TransactionTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertQuerySetEqual</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">qs</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">values</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">transform</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\">ordered</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">msg</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.TransactionTestCase.assertQuerySetEqual\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Säger att en frågeuppsättning <code class=\"docutils literal notranslate\"><span class=\"pre\">qs</span></code> matchar en viss iterabel av värden <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code>.</p>\n<p>Om <code class=\"docutils literal notranslate\"><span class=\"pre\">transform</span></code> anges, jämförs <code class=\"docutils literal notranslate\"><span class=\"pre\">values</span></code> med en lista som framställs genom att <code class=\"docutils literal notranslate\"><span class=\"pre\">transform</span></code> tillämpas på varje medlem i <code class=\"docutils literal notranslate\"><span class=\"pre\">qs</span></code>.</p>\n<p>Som standard är jämförelsen också beroende av ordning. Om <code class=\"docutils literal notranslate\"><span class=\"pre\">qs</span></code> inte tillhandahåller en implicit ordning kan du ställa in parametern <code class=\"docutils literal notranslate\"><span class=\"pre\">ordered</span></code> till <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, vilket gör jämförelsen till en <code class=\"docutils literal notranslate\"><span class=\"pre\">collections.Counter</span></code> jämförelse. Om ordningen är odefinierad (om den givna <code class=\"docutils literal notranslate\"><span class=\"pre\">qs</span></code> inte är ordnad och jämförelsen är mot mer än ett ordnat värde), kommer ett <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code> att uppstå.</p>\n<p>Utdata i händelse av fel kan anpassas med argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">msg</span></code>.</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.test.TransactionTestCase.assertNumQueries\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">TransactionTestCase.</span></span><span class=\"sig-name descname\"><span class=\"pre\">assertNumQueries</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">num</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">func</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">*</span></span><span class=\"n\"><span class=\"pre\">args</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">kwargs</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.TransactionTestCase.assertNumQueries\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Säger att när <code class=\"docutils literal notranslate\"><span class=\"pre\">func</span></code> anropas med <code class=\"docutils literal notranslate\"><span class=\"pre\">*args</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">**kwargs</span></code> så körs <code class=\"docutils literal notranslate\"><span class=\"pre\">num</span></code> databasfrågor.</p>\n<p>Om en <code class=\"docutils literal notranslate\"><span class=\"pre\">&quot;using&quot;</span></code>-nyckel finns i <code class=\"docutils literal notranslate\"><span class=\"pre\">kwargs</span></code> används den som databasalias för att kontrollera antalet frågor:</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=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertNumQueries</span><span class=\"p\">(</span><span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"n\">my_function</span><span class=\"p\">,</span> <span class=\"n\">using</span><span class=\"o\">=</span><span class=\"s2\">&quot;non_default_db&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Om du vill anropa en funktion med en <code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code> parameter kan du göra det genom att omsluta anropet med en <code class=\"docutils literal notranslate\"><span class=\"pre\">lambda</span></code> för att lägga till en extra parameter:</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=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertNumQueries</span><span class=\"p\">(</span><span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"k\">lambda</span><span class=\"p\">:</span> <span class=\"n\">my_function</span><span class=\"p\">(</span><span class=\"n\">using</span><span class=\"o\">=</span><span class=\"mi\">7</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Du kan också använda detta som en kontexthanterare:</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=\"k\">with</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertNumQueries</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">):</span>\n    <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Aaron&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">Person</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Daniel&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</dd></dl>\n\n</section>\n<section id=\"tagging-tests\">\n<span id=\"topics-tagging-tests\"></span><h3>Taggning av tester<a class=\"heading-anchor\" href=\"#tagging-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan märka dina tester så att du enkelt kan köra en viss delmängd. Du kan till exempel märka snabba eller långsamma tester:</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</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">tag</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SampleTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;fast&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_fast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n\n    <span class=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;slow&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_slow</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n\n    <span class=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;slow&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;core&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_slow_but_core</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Du kan också tagga en testfallsklass:</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=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;slow&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;core&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SampleTestCase</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p>Underklasser ärver taggar från överklasser och metoder ärver taggar från sin klass. Givet:</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=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;foo&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">SampleTestCaseChild</span><span class=\"p\">(</span><span class=\"n\">SampleTestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@tag</span><span class=\"p\">(</span><span class=\"s2\">&quot;bar&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">SampleTestCaseChild.test</span></code> kommer att märkas med <code class=\"docutils literal notranslate\"><span class=\"pre\">'slow'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'core'</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">'bar'</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">'foo'</span></code>.</p>\n<p>Sedan kan du välja vilka tester som ska köras. Till exempel om du bara vill köra snabba tester:</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>./manage.py<span class=\"w\"> </span><span class=\"nb\">test</span><span class=\"w\"> </span>--tag<span class=\"o\">=</span>fast\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> manage.py test --tag=fast\n</code></pre></div></div></div>\n<p>Eller för att köra snabba tester och kärntesten (även om den är långsam):</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>./manage.py<span class=\"w\"> </span><span class=\"nb\">test</span><span class=\"w\"> </span>--tag<span class=\"o\">=</span>fast<span class=\"w\"> </span>--tag<span class=\"o\">=</span>core\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> manage.py test --tag=fast --tag=core\n</code></pre></div></div></div>\n<p>Du kan också utesluta tester med hjälp av taggar. För att köra kärntester om de inte är långsamma:</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>./manage.py<span class=\"w\"> </span><span class=\"nb\">test</span><span class=\"w\"> </span>--tag<span class=\"o\">=</span>core<span class=\"w\"> </span>--exclude-tag<span class=\"o\">=</span>slow\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> manage.py test --tag=core --exclude-tag=slow\n</code></pre></div></div></div>\n<p><a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#cmdoption-test-exclude-tag\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">test</span> <span class=\"pre\">--exclude-tag</span></code></a> har företräde framför <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#cmdoption-test-tag\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">test</span> <span class=\"pre\">--tag</span></code></a>, så om ett test har två taggar och du väljer en av dem och utesluter den andra, kommer testet inte att köras.</p>\n</section>\n</section>\n<section id=\"testing-asynchronous-code\">\n<span id=\"async-tests\"></span><h2>Testning av asynkron kod<a class=\"heading-anchor\" href=\"#testing-asynchronous-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Om du bara vill testa utdata från dina asynkrona vyer kommer standardtestklienten att köra dem i sin egen asynkrona loop utan något extra arbete från din sida.</p>\n<p>Men om du vill skriva helt asynkrona tester för ett Django-projekt måste du ta hänsyn till flera saker.</p>\n<p>För det första måste dina tester vara <code class=\"docutils literal notranslate\"><span class=\"pre\">async</span> <span class=\"pre\">def</span></code>-metoder på testklassen (för att ge dem ett asynkront sammanhang). Django kommer automatiskt att upptäcka alla <code class=\"docutils literal notranslate\"><span class=\"pre\">async</span> <span class=\"pre\">def</span></code>-tester och linda in dem så att de körs i sin egen händelseslinga.</p>\n<p>Om du testar från en asynkron funktion måste du också använda den asynkrona testklienten. Detta är tillgängligt som <code class=\"docutils literal notranslate\"><span class=\"pre\">django.test.AsyncClient</span></code>, eller som <code class=\"docutils literal notranslate\"><span class=\"pre\">self.async_client</span></code> på alla tester.</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.test.AsyncClient\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">AsyncClient</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">enforce_csrf_checks</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">raise_request_exception</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"keyword-only-separator o\"><abbr title=\"Keyword-only parameters separator (PEP 3102)\"><span class=\"pre\">*</span></abbr></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">headers</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\">query_params</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=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">defaults</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.AsyncClient\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">AsyncClient</span></code> har samma metoder och signaturer som den synkrona (normala) testklienten, med följande undantag:</p>\n<ul>\n<li><p>Vid initialiseringen läggs godtyckliga nyckelordsargument i <code class=\"docutils literal notranslate\"><span class=\"pre\">defaults</span></code> till direkt i ASGI-scopet.</p></li>\n<li><p>Headers som skickas som <code class=\"docutils literal notranslate\"><span class=\"pre\">extra</span></code> nyckelordsargument bör inte ha prefixet <code class=\"docutils literal notranslate\"><span class=\"pre\">HTTP_</span></code> som krävs av den synkrona klienten (se <a class=\"reference internal\" href=\"#django.test.Client.get\" title=\"django.test.Client.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">Client.get()</span></code></a>). Till exempel, så här ställer du in en HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">Accept</span></code> header:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"n\">AsyncClient</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">c</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/customers/details/&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;fred&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;age&quot;</span><span class=\"p\">:</span> <span class=\"mi\">7</span><span class=\"p\">},</span> <span class=\"n\">ACCEPT</span><span class=\"o\">=</span><span class=\"s2\">&quot;application/json&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n</li>\n</ul>\n<p>Med hjälp av <code class=\"docutils literal notranslate\"><span class=\"pre\">AsyncClient</span></code> måste alla metoder som gör en begäran väntas:</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=\"k\">async</span> <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_my_thing</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"k\">await</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">async_client</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s2\">&quot;/some-url/&quot;</span><span class=\"p\">)</span>\n    <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">response</span><span class=\"o\">.</span><span class=\"n\">status_code</span><span class=\"p\">,</span> <span class=\"mi\">200</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Den asynkrona klienten kan också anropa synkrona vyer; den körs genom Djangos <a class=\"reference internal\" href=\"/sv/6.1/topics/async/\"><span class=\"doc\">asynkrona sökväg</span></a>, som stöder båda. Varje vy som anropas via <code class=\"docutils literal notranslate\"><span class=\"pre\">AsyncClient</span></code> kommer att få ett <code class=\"docutils literal notranslate\"><span class=\"pre\">ASGIRequest</span></code>-objekt för sin <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> snarare än <code class=\"docutils literal notranslate\"><span class=\"pre\">WSGIRequest</span></code> som den normala klienten skapar.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Om du använder testdekoratorer måste de vara async-kompatibla för att säkerställa att de fungerar korrekt. Djangos inbyggda dekoratorer kommer att bete sig korrekt, men dekoratorer från tredje part kan verka som om de inte exekveras (de kommer att ”linda in” fel del av exekveringsflödet och inte ditt test).</p>\n<p>Om du behöver använda dessa dekoratorer, bör du dekorera dina testmetoder med <a class=\"reference internal\" href=\"/sv/6.1/topics/async/#asgiref.sync.async_to_sync\" title=\"asgiref.sync.async_to_sync\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">async_to_sync()</span></code></a> <em>inom</em> dem istället:</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\">asgiref.sync</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">async_to_sync</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\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@mock</span><span class=\"o\">.</span><span class=\"n\">patch</span><span class=\"p\">(</span><span class=\"o\">...</span><span class=\"p\">)</span>\n    <span class=\"nd\">@async_to_sync</span>\n    <span class=\"k\">async</span> <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_my_thing</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span> <span class=\"o\">...</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"email-services\">\n<span id=\"topics-testing-email\"></span><h2>E-posttjänster<a class=\"heading-anchor\" href=\"#email-services\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>If any of your code sends email using <a class=\"reference internal\" href=\"/sv/6.1/topics/email/\"><span class=\"doc\">Django’s email functionality</span></a>, you probably don’t want to send email each time you run a\ntest that exercises that code. For this reason, Django’s test runner\nautomatically redirects all Django-sent email to an in-memory outbox. This lets\nyou test every aspect of sending email – from the number of messages sent to\nthe contents of each message – without actually sending the messages.</p>\n<p>The test runner accomplishes this by transparently replacing the\n<a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MAILERS-BACKEND\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">BACKEND</span></code></a> for each configured <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MAILERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MAILERS</span></code></a>\nalias with the <code class=\"docutils literal notranslate\"><span class=\"pre\">'locmem'</span></code> <a class=\"reference internal\" href=\"/sv/6.1/topics/email/#topic-email-memory-backend\"><span class=\"std std-ref\">memory email backend</span></a>. (Don’t worry – this has no effect on any other\nemail senders outside of Django, such as your machine’s mail server, if you’re\nrunning one.)</p>\n<dl class=\"py data\">\n<dt class=\"sig sig-object py\" id=\"django.core.mail.django.core.mail.outbox\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.core.mail.</span></span><span class=\"sig-name descname\"><span class=\"pre\">outbox</span></span><a class=\"heading-anchor\" href=\"#django.core.mail.django.core.mail.outbox\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>During test running, each outgoing email is saved in\n<code class=\"docutils literal notranslate\"><span class=\"pre\">django.core.mail.outbox</span></code>. This is a list of all\n<a class=\"reference internal\" href=\"/sv/6.1/topics/email/#django.core.mail.EmailMessage\" title=\"django.core.mail.EmailMessage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">EmailMessage</span></code></a> instances that have been sent. The\n<code class=\"docutils literal notranslate\"><span class=\"pre\">outbox</span></code> attribute is a special attribute that is created <em>only</em> when the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">locmem</span></code> email backend is used. It doesn’t normally exist as part of the\n<a class=\"reference internal\" href=\"/sv/6.1/topics/email/#module-django.core.mail\" title=\"django.core.mail: Helpers to send email.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">django.core.mail</span></code></a> module and you can’t import it directly. The code below\nshows how to access this attribute correctly.</p>\n<p>Här är ett exempel på ett test som undersöker <code class=\"docutils literal notranslate\"><span class=\"pre\">django.core.mail.outbox</span></code> för längd och innehåll:</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.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">mail</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\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">EmailTest</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_send_email</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Send message.</span>\n        <span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">send_mail</span><span class=\"p\">(</span>\n            <span class=\"s2\">&quot;Subject here&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;Here is the message.&quot;</span><span class=\"p\">,</span>\n            <span class=\"s2\">&quot;from@example.com&quot;</span><span class=\"p\">,</span>\n            <span class=\"p\">[</span><span class=\"s2\">&quot;to@example.com&quot;</span><span class=\"p\">],</span>\n        <span class=\"p\">)</span>\n\n        <span class=\"c1\"># Test that one message has been sent.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">),</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Verify that the subject of the first message is correct.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">subject</span><span class=\"p\">,</span> <span class=\"s2\">&quot;Subject here&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Verify the message was sent with the &quot;default&quot; mailer.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">sent_using</span><span class=\"p\">,</span> <span class=\"s2\">&quot;default&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"6.1\">\n<p class=\"version-note-title\">Changed in Django 6.1</p><p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">sent_using</span></code> attribute was added to messages in the outbox.</p>\n</aside>\n<p>Som nämnts <a class=\"reference internal\" href=\"#emptying-test-outbox\"><span class=\"std std-ref\">tidigare</span></a>, töms testutkorgen i början av varje test i ett Django <code class=\"docutils literal notranslate\"><span class=\"pre\">*TestCase</span></code>. För att tömma utkorgen manuellt, tilldela den tomma listan till <code class=\"docutils literal notranslate\"><span class=\"pre\">mail.outbox</span></code>:</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.core</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">mail</span>\n\n<span class=\"c1\"># Empty the test outbox</span>\n<span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">outbox</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n</code></pre></div>\n</section>\n<section id=\"management-commands\">\n<span id=\"topics-testing-management-commands\"></span><h2>Kommandon för hantering<a class=\"heading-anchor\" href=\"#management-commands\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Hanteringskommandon kan testas med funktionen <a class=\"reference internal\" href=\"/sv/6.1/ref/django-admin/#django.core.management.call_command\" title=\"django.core.management.call_command\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">call_command()</span></code></a>. Utdata kan omdirigeras till en <code class=\"docutils literal notranslate\"><span class=\"pre\">StringIO</span></code>-instans:</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\">io</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">StringIO</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.management</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">call_command</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\">TestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">ClosepollTest</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_command_output</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">out</span> <span class=\"o\">=</span> <span class=\"n\">StringIO</span><span class=\"p\">()</span>\n        <span class=\"n\">call_command</span><span class=\"p\">(</span><span class=\"s2\">&quot;closepoll&quot;</span><span class=\"p\">,</span> <span class=\"n\">poll_ids</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">],</span> <span class=\"n\">stdout</span><span class=\"o\">=</span><span class=\"n\">out</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">assertIn</span><span class=\"p\">(</span><span class=\"s1\">&#39;Successfully closed poll &quot;1&quot;&#39;</span><span class=\"p\">,</span> <span class=\"n\">out</span><span class=\"o\">.</span><span class=\"n\">getvalue</span><span class=\"p\">())</span>\n</code></pre></div>\n</section>\n<section id=\"skipping-tests\">\n<span id=\"id3\"></span><h2>Skippa prov<a class=\"heading-anchor\" href=\"#skipping-tests\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Biblioteket unittest tillhandahåller dekoratorerna <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.skipIf\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">&#64;skipIf</span></code></a> och <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.skipUnless\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">&#64;skipUnless</span></code></a> så att du kan hoppa över tester om du i förväg vet att dessa tester kommer att misslyckas under vissa förutsättningar.</p>\n<p>Om ditt test till exempel kräver ett visst valfritt bibliotek för att lyckas, kan du dekorera testfallet med <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#unittest.skipIf\" title=\"(in Python v3.14)\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">&#64;skipIf</span></code></a>. Då kommer testköraren att rapportera att testet inte kördes och varför, istället för att misslyckas med testet eller utelämna testet helt och hållet.</p>\n<p>För att komplettera dessa testöverhoppningsbeteenden tillhandahåller Django ytterligare två skip-dekoratorer. Istället för att testa en generisk boolean, kontrollerar dessa dekoratorer databasens kapacitet och hoppar över testet om databasen inte stöder en specifik namngiven funktion.</p>\n<p>Dekoratörerna använder en strängidentifierare för att beskriva databasfunktioner. Denna sträng motsvarar attribut i klassen för databasanslutningsfunktioner. Se <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/6.1.x/django/db/backends/base/features.py\">django.db.backends.base.features.BaseDatabaseFeatures class</a> för en fullständig lista över databasfunktioner som kan användas som grund för att hoppa över tester.</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.skipIfDBFeature\">\n<span class=\"sig-name descname\"><span class=\"pre\">skipIfDBFeature</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\">feature_name_strings</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.skipIfDBFeature\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Hoppa över det dekorerade testet eller <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> om alla de namngivna databasfunktionerna stöds.</p>\n<p>Till exempel kommer följande test inte att utföras om databasen stöder transaktioner (t.ex. skulle det * inte * köras under PostgreSQL, men det skulle under MySQL med MyISAM-tabeller):</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@skipIfDBFeature</span><span class=\"p\">(</span><span class=\"s2\">&quot;supports_transactions&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_transaction_behavior</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ... conditional test code</span>\n        <span class=\"k\">pass</span>\n</code></pre></div>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.test.skipUnlessDBFeature\">\n<span class=\"sig-name descname\"><span class=\"pre\">skipUnlessDBFeature</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\">feature_name_strings</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.test.skipUnlessDBFeature\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>Hoppa över det dekorerade testet eller <code class=\"docutils literal notranslate\"><span class=\"pre\">TestCase</span></code> om någon av de namngivna databasfunktionerna <em>inte</em> stöds.</p>\n<p>Till exempel kommer följande test endast att utföras om databasen stöder transaktioner (t.ex. skulle det köras under PostgreSQL, men * inte * under MySQL med MyISAM-tabeller):</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=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyTests</span><span class=\"p\">(</span><span class=\"n\">TestCase</span><span class=\"p\">):</span>\n    <span class=\"nd\">@skipUnlessDBFeature</span><span class=\"p\">(</span><span class=\"s2\">&quot;supports_transactions&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_transaction_behavior</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ... conditional test code</span>\n        <span class=\"k\">pass</span>\n</code></pre></div>\n</section>","rootId":"testing-tools","toc":[{"title":"Testklienten","anchor":"the-test-client","children":[{"title":"Översikt och ett snabbt exempel","anchor":"overview-and-a-quick-example","children":[]},{"title":"Att göra förfrågningar","anchor":"making-requests","children":[]},{"title":"Testning av svar","anchor":"testing-responses","children":[]},{"title":"Undantag","anchor":"exceptions","children":[]},{"title":"Beständigt tillstånd","anchor":"persistent-state","children":[]},{"title":"Ställa in språk","anchor":"setting-the-language","children":[]},{"title":"Exempel","anchor":"example","children":[]}]},{"title":"Tillhandahållna testfallsklasser","anchor":"provided-test-case-classes","children":[{"title":"SimpleTestCase","anchor":"simpletestcase","children":[]},{"title":"TransactionTestCase","anchor":"transactiontestcase","children":[]},{"title":"TestCase","anchor":"testcase","children":[]},{"title":"LiveServerTestCase","anchor":"liveservertestcase","children":[]}]},{"title":"Testfall funktioner","anchor":"test-cases-features","children":[{"title":"Standard testklient","anchor":"default-test-client","children":[]},{"title":"Anpassning av testklienten","anchor":"customizing-the-test-client","children":[]},{"title":"Lastning av fixtur","anchor":"fixture-loading","children":[]},{"title":"URLconf-konfiguration","anchor":"urlconf-configuration","children":[]},{"title":"Stöd för flera databaser","anchor":"multi-database-support","children":[]},{"title":"Åsidosätta inställningar","anchor":"overriding-settings","children":[]},{"title":"Isolera appar","anchor":"isolating-apps","children":[]},{"title":"Tömning av testboxen","anchor":"emptying-the-test-outbox","children":[]},{"title":"Påståenden","anchor":"assertions","children":[]},{"title":"Taggning av tester","anchor":"tagging-tests","children":[]}]},{"title":"Testning av asynkron kod","anchor":"testing-asynchronous-code","children":[]},{"title":"E-posttjänster","anchor":"email-services","children":[]},{"title":"Kommandon för hantering","anchor":"management-commands","children":[]},{"title":"Skippa prov","anchor":"skipping-tests","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.1/topics/"},{"docname":"topics/testing/index","title":"Testning i Django","url":"/sv/6.1/topics/testing/"}],"prev":{"docname":"topics/testing/overview","title":"Skriva och köra tester","url":"/sv/6.1/topics/testing/overview/"},"next":{"docname":"topics/testing/advanced","title":"Avancerade testämnen","url":"/sv/6.1/topics/testing/advanced/"},"formats":{"html":"/sv/6.1/topics/testing/tools/","markdown":"/sv/6.1/topics/testing/tools.md","json":"/sv/6.1/topics/testing/tools.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/testing/tools.txt","official":"https://docs.djangoproject.com/sv/6.1/topics/testing/tools/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}