Skip to main content

Test utilities for Django projects.

Project description

django-pigeon

Test utilities for Django projects

Build Status codecov Codacy Badge

Installation

$ pip install django-pigeon

Usage

django-pigeon comes equipped with a RenderTestCase which provides an assortment of methods on top of Django's TestCase that assist with end-to-end testing of views in Django. Writing a test that verifies a view renders correctly is as simple as:

from pigeon.test import RenderTestCase


class FooTestCase(RenderTestCase):

    def testFooView(self):
        self.assertResponseRenders('/foo/')

You can also inspect the rendered response:

def testFooView(self):
    response = self.assertResponseRenders('/foo/')
    self.assertIn('FOO', response.content)

By default, assertResponseRenders verifies that the status code of the response is 200, but you can change this by specifying the status_code keyword argument:

def testBarView404(self):
    self.assertResponseRenders('/bar/', status_code=404)

You can also make POST and PUT requests using assertResponseRenders by providing the method and data keywords arguments:

def testCreateFooView(self):
    payload = {'text': 'Hello World!'}
    self.assertResponseRenders('/foo/create/', status_code=201, method='POST', data=payload)

If you are using HTML generated from Django forms, you can set has_form_error=True as a shortcut to check for errorlist in the resulting HTML:

def testCreateFooViewWithoutText(self):
    response = self.assertResponseRenders('/foo/create/', method='POST', has_form_error=True)
    self.assertIn('This field is required.', response.content)

Use assertAPIResponseRenders for JSON responses. json.loads is automatically called on the response, so the object returned is ready for inspection:

def testFooAPIView(self):
    payload = {'text': 'Hello!'}
    response = self.assertAPIResponseRenders('/foo/', method='POST', data=payload)
    self.assertEquals(response['text'], 'Hello!')

You can use assertResponseRedirects to test redirects:

def testFooRedirects(self):
    # /foo/ redirects to /bar/
    self.assertResponseRedirects('/foo/', '/bar/')

If you have a list of views that you want to verify are rendering as 200 without adding any special assertion logic, you can simply override the get200s and getAPI200s methods, which should return a list of URLs. django-pigeon will construct test methods that check that rendering all of these URLs results in a 200:

class FooTestCase(RenderTestCase):

    def get200s(self):
        return [
            '/foo/',
            '/bar/',
            '/foobar/',
        ]

    def getAPI200s(self):
        return [
            '/api/foo/',
        ]

Most of the features in RenderTestCase are actually implemented in the mixin class RenderTestCaseMixin. You can combine RenderTestCaseMixin with other TestCase classes to get additional functionality:

from django.test import TransactionTestCase
from pigeon.test import RenderTestCaseMixin


class FooTransactionTestCase(RenderTestCaseMixin, TransactionTestCase):

    def testFooView(self):
        ...

django-pigeon supports Python 3.5+ and Django 2.2+.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-pigeon-0.4.0.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

django_pigeon-0.4.0-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file django-pigeon-0.4.0.tar.gz.

File metadata

  • Download URL: django-pigeon-0.4.0.tar.gz
  • Upload date:
  • Size: 4.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.8.7 Linux/4.15.0-1077-gcp

File hashes

Hashes for django-pigeon-0.4.0.tar.gz
Algorithm Hash digest
SHA256 528407a3d8e6fa1e57f79155a809f90ed882d31bd394e9244a4e0c832ebd34e4
MD5 6136b07fd7e914a98ecf79a0e78a1c8a
BLAKE2b-256 5ff238a87b147b8f3db5122b032f6111251e857486f8ac97a207a95bf492aeb7

See more details on using hashes here.

File details

Details for the file django_pigeon-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: django_pigeon-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.8.7 Linux/4.15.0-1077-gcp

File hashes

Hashes for django_pigeon-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 aaa94e55ff10eb4dfc157ca74bc39a64fe94d7ed0e0fb316d2778e4ff0a0e091
MD5 2db9058945af296e3c3e07241fd86ce4
BLAKE2b-256 08777d6494f92cc81ff6fd2ff2b1597a70ba4b0d0fcd18a50e0069f12d3716fd

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page