pytest-djangoapp
https://github.com/idlesign/pytest-djangoapp
Description
Nice pytest plugin to help you with Django pluggable application testing.
This exposes some useful tools for Django applications developers to facilitate tests authoring, including:
- Settings overriding
- Template tags testing
- User creation
- Request object creation
- Management command calls
- Mailing
- Migrations
- Messages
- DB queries audit
- Live server & client UI testing
- etc.
Suitable for testing apps for Django 1.8+.
How to use
Let\'s say you have classical tests placing (inside application directory):
package_dir
|__ myapp
| |__ __init__.py
| |__ tests
| | |__ __init__.py
| | |__ conftest.py <- Configure djangoapp here.
|
|__ setup.py
Add the following lines into [conftest.py]{.title-ref} to configure [djangoapp]{.title-ref} and start using it:
# conftest.py
from pytest_djangoapp import configure_djangoapp_plugin
pytest_plugins = configure_djangoapp_plugin()
Fixtures usage examples can be found in the documentation and the source code.
Testing an entire project
Despite the fact that [djangoapp]{.title-ref} is primarily aimed to reusable Django applications testing one can use it also to test a project (a set of apps). For that, pass a dotted settings module path into [settings]{.title-ref} argument:
pytest_plugins = configure_djangoapp_plugin(
settings='myproject.settings.settings_testing',
migrate=False, # If you do not want to apply migrations.
)
What about pytest-django
[pytest-djangoapp]{.title-ref} does not depend on [pytest-django]{.title-ref}.
There are design decisions in [pytest-django]{.title-ref} that might make it uncomfortable to work with.
- It uses [setuptools]{.title-ref} entrypoints feature for [pytest]{.title-ref} plugin discovery. It\'s not a problem by itself, but all kinds of bootstrapping with side effects made by [pytest-django]{.title-ref} just on startup, make the plugin a poor choice for cases of system-wide (i.e. not venv) installations.
- Philosophy that next to no unit test should require DB access may be quite annoying.
- Some fixtures (e.g. [django_assert_num_queries]{.title-ref}) usability arouse questions.
Despite that [pytest-django]{.title-ref} is nice, of course.
[pytest-djangoapp]{.title-ref} fixtures allow the use of Django without
marking all relevant tests as needing a database, as is required by
pytest-django which provides the django_db
mark and db fixtures.
If you have [pytest-django]{.title-ref} already installed, it can be
disabled for projects using [pytest-djangoapp]{.title-ref} by adding the
following lines into pytest.ini
:
# pytest.ini
[pytest]
addopts = -p no:django