From 80cc3695542f45529fb2d24295f395cf1b2cb6d5 Mon Sep 17 00:00:00 2001 From: Julio Biason Date: Fri, 17 Jun 2016 13:59:27 -0300 Subject: [PATCH] django tests --- django.html | 147 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 104 insertions(+), 43 deletions(-) diff --git a/django.html b/django.html index 669a0e2..19dde38 100644 --- a/django.html +++ b/django.html @@ -48,16 +48,6 @@

Entendendo Django

-
-

Agenda

- - -
-

Projeto

@@ -127,24 +117,24 @@
-
-

Outras coisas do manage.py

- -
    -
  • python manage.py syncdb: Cria as - tabelas necessárias e adiciona os dados - necessários.
  • -
  • python manage.py makemigrations: - Verifica alterações em modelos e gera regras - para conversão do banco.
  • -
  • python manage.py shell: Shell de - acesso ao Django (na verdade, abre um - interpretador Python com um monte de coisas já - carregadas/configuradas)
  • -
  • python manage.py runserver: Roda - um server de desenvolvimento.
  • -
-
+
+

Outras coisas do manage.py

+ +
    +
  • python manage.py syncdb: Cria as + tabelas necessárias e adiciona os dados + necessários.
  • +
  • python manage.py makemigrations: + Verifica alterações em modelos e gera regras + para conversão do banco.
  • +
  • python manage.py shell: Shell de + acesso ao Django (na verdade, abre um + interpretador Python com um monte de coisas já + carregadas/configuradas)
  • +
  • python manage.py runserver: Roda + um server de desenvolvimento.
  • +
+
@@ -374,7 +364,9 @@ fruit = Product.objects.get(name='fruit')

-all_fruits = Order.objects.filter(products__name__like='fruit')
+all_fruits_in_orders = Order.objects \
+                       .filter(products__name__like='fruit') \
+                       .distinct()
                         
@@ -408,31 +400,31 @@ print Products.order_set.all() related_name.

-
-

Queries com AND

+
+

Queries com AND

-

Queries onde todas as condições devem ser - satisfeitas podem ser feitas passando mais - parametros em filter.

+

Queries onde todas as condições devem ser + satisfeitas podem ser feitas passando mais + parametros em filter.

-

+                        

 all_expensive_fruits = Order.objects.filter(
     products__name__like='fruit',
     price__gt=1000)
-						
-
+ +
-
-

Queryes com OR

+
+

Queries com OR

-

Para queries com OR, deve-ser usar o objeto Q.

+

Para queries com OR, deve-ser usar o objeto Q.

-

+                        

 all_fruits_or_expensive = Order.objects.filter(
     Q(products__name__like='fruit') |
     Q(price__gt=1000))
-						
-
+ +

Q

@@ -638,6 +630,75 @@ def free(value):
+ +
+
+

URLs/Redirects

+ +

Redirects servem para indicar que o browser deve se + direcionar à outra URL.

+ +

Para referenciar URLs de outras apps (ou mesmo da + mesma app), deve-ser usar o método + reverse.

+ +

+from django.core.urlresolvers import reverse
+from django.shortcuts import redirect
+
+def view(request):
+    # do stuff
+    return redirect(reverse('app:func'))
+
+                        
+
+
+ +
+
+

Testes

+ +

Bem parecido com o módulo unittest do Python + padrão.

+ +

+import random
+
+from django.test import TestCase
+
+class RandomTest(TestCase):
+    def test_random(self):
+        """Check if random numbers return random numbers."""
+        self.assertTrue(random.randint(255) != 0)
+                        
+
+ +
+

Testes podem acessar qualquer coisa (desde que importados):

+ +
    +
  • Modelos;
  • +
  • Views;
  • +
  • Requisições inteiras.
  • +
+
+ +
+

+from django.test import Client
+from django.test import TestCase
+
+class RequestTest(TestCase):
+    def test_retrieve_page(self):
+        client = Client()
+        response = client.get('/')
+        self.assertTrue('success!' in response.content)
+        self.assertEquals(response.status_code, 200)
+        self.assertTrue('variable' in response.context)
+        self.assertEqual(response.context['variable'], 'success')
+                        
+
+