django-test-plus provides useful additions to Django's default TestCase
Project description
django-test-plus
Useful additions to Django's default TestCase from REVSYS
Rationale
Let's face it, writing tests isn't always fun. Part of the reason for that is all of the boilerplate you end up writing. django-test-plus is an attempt to cut down on some of that when writing Django tests. We guarantee it will increase the time before you get carpal tunnel by at least 3 weeks!
If you would like to get started testing your Django apps or improve how your team is testing we offer TestStart to help your team dramatically improve your productivity.
Support
-
Python 3.10, 3.11, 3.12, 3.13, and 3.14, including the 3.14 free-threaded build (3.14t).
-
Django 4.2 LTS, 5.1, 5.2 LTS, 6.0, and 6.1.
Installation
$ pip install django-test-plus
Usage
Have your tests inherit from test_plus.test.TestCase rather than the normal
django.test.TestCase:
from test_plus.test import TestCase
class MyViewTests(TestCase):
...
That is enough to get rolling. Here is a taste of what you get — reversing URLs, checking status codes, and inspecting context without the boilerplate:
class MyViewTests(TestCase):
def test_the_view(self):
# GET a named URL, with args or kwargs if it needs them
self.get('my-url-name')
self.response_200()
# The last response and its context are stored for you
self.assertInContext('some-key')
self.assertResponseContains('<p>Hello, World!</p>')
# POST data, then check the redirect
self.post('my-form-view', data={'name': 'Test'})
self.response_302()
def test_auth(self):
user = self.make_user('u1')
self.assertLoginRequired('my-protected-view')
with self.login(user):
self.get_check_200('my-protected-view')
def test_query_count(self):
# 200 OK in under 50 queries, in one line
self.assertGoodView('my-url-name')
You are encouraged to create your own sub-class for your project so you can add project-specific helper methods:
# myproject/test.py
from test_plus.test import TestCase as PlusTestCase
class TestCase(PlusTestCase):
pass
There is a pytest fixture too — ask for tp and you get the same helpers:
def test_url_reverse(tp):
assert tp.reverse('api') == '/api/'
Documentation
Full documentation, including the complete method reference, is available at django-test-plus.readthedocs.org.
- Usage — including pytest fixtures and testing DRF views
- Methods —
requests, status code assertions, response and context helpers,
make_user - Authentication helpers —
assertLoginRequiredand thelogin()context - Ensuring low query counts —
assertNumQueriesLessThanandassertGoodView - Testing class-based views
- Disable logging
Development
To work on django-test-plus itself, clone this repository and run the following command:
$ pip install -e .
$ pip install -e .[test]
To run all tests:
$ nox
NOTE: You will also need to ensure that the test_project directory, located
at the root of this repo, is in your virtualenv's path.
Keep in touch!
If you have a question about this project, please open a GitHub issue. If you love us and want to keep track of our goings-on, here's where you can find us online:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_test_plus-2.6.0.tar.gz.
File metadata
- Download URL: django_test_plus-2.6.0.tar.gz
- Upload date:
- Size: 16.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ee1d4069f2686642aabbd98afc3b73b70b4fc7e2bf7b83fdfc0bd98cf02713b8
|
|
| MD5 |
2b6c24e0535911548cdb88aca4fae9d8
|
|
| BLAKE2b-256 |
fb19c1ba3df896f9c6633d88175d48e99263caf55cc5d75a18ee4b810e825ca6
|
File details
Details for the file django_test_plus-2.6.0-py3-none-any.whl.
File metadata
- Download URL: django_test_plus-2.6.0-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
51caf3030dd8e6e2f7c620a5f3db53ea492e5447d4b0b3af7fffc9a963dbba5a
|
|
| MD5 |
49e033218963f72d3a0273e15fc58c09
|
|
| BLAKE2b-256 |
a44e689037a24464df352f82190b2fff6c51fed23d33356197d6a40c40b4196f
|