Fixed #23778 -- Added a doc section on using the Django runner for reusable apps.
This commit is contained in:
parent
343162410f
commit
06726965c3
|
@ -234,30 +234,76 @@ Advanced features of ``TransactionTestCase``
|
|||
Using ``reset_sequences = True`` will slow down the test, since the primary
|
||||
key reset is an relatively expensive database operation.
|
||||
|
||||
Running tests outside the test runner
|
||||
=====================================
|
||||
|
||||
If you want to run tests outside of ``./manage.py test`` -- for example,
|
||||
from a shell prompt -- you will need to set up the test
|
||||
environment first. Django provides a convenience method to do this::
|
||||
Using the Django test runner to test reusable applications
|
||||
==========================================================
|
||||
|
||||
>>> from django.test.utils import setup_test_environment
|
||||
>>> setup_test_environment()
|
||||
If you are writing a :doc:`reusable application </intro/reusable-apps>`
|
||||
you may want to use the Django test runner to run your own test suite
|
||||
and thus benefit from the Django testing infrastructure.
|
||||
|
||||
:func:`~django.test.utils.setup_test_environment` puts several Django features
|
||||
into modes that allow for repeatable testing, but does not create the test
|
||||
databases; :func:`django.test.runner.DiscoverRunner.setup_databases`
|
||||
takes care of that.
|
||||
A common practice is a *tests* directory next to the application code, with the
|
||||
following structure::
|
||||
|
||||
The call to :func:`~django.test.utils.setup_test_environment` is made
|
||||
automatically as part of the setup of ``./manage.py test``. You only
|
||||
need to manually invoke this method if you're not using running your
|
||||
tests via Django's test runner.
|
||||
runtests.py
|
||||
polls/
|
||||
__init__.py
|
||||
models.py
|
||||
...
|
||||
tests/
|
||||
__init__.py
|
||||
models.py
|
||||
test_settings.py
|
||||
tests.py
|
||||
|
||||
.. versionchanged:: 1.7
|
||||
Let's take a look inside a couple of those files:
|
||||
|
||||
.. snippet::
|
||||
:filename: runtests.py
|
||||
|
||||
#!/usr/bin/env python
|
||||
import os
|
||||
import sys
|
||||
|
||||
import django
|
||||
from django.conf import settings
|
||||
from django.test.utils import get_runner
|
||||
|
||||
if __name__ == "__main__":
|
||||
os.environ['DJANGO_SETTINGS_MODULE'] = 'tests.test_settings'
|
||||
django.setup()
|
||||
TestRunner = get_runner(settings)
|
||||
test_runner = TestRunner()
|
||||
failures = test_runner.run_tests(["tests"])
|
||||
sys.exit(bool(failures))
|
||||
|
||||
|
||||
This is the script that you invoke to run the test suite. It sets up the
|
||||
Django environment, creates the test database and runs the tests.
|
||||
|
||||
For the sake of clarity, this example contains only the bare minimum
|
||||
necessary to use the Django test runner. You may want to add
|
||||
command-line options for controlling verbosity, passing in specific test
|
||||
labels to run, etc.
|
||||
|
||||
.. snippet::
|
||||
:filename: tests/test_settings.py
|
||||
|
||||
SECRET_KEY = 'fake-key'
|
||||
INSTALLED_APPS = [
|
||||
"tests",
|
||||
]
|
||||
|
||||
This file contains the :doc:`Django settings </topics/settings>`
|
||||
required to run your app's tests.
|
||||
|
||||
Again, this is a minimal example; your tests may require additional
|
||||
settings to run.
|
||||
|
||||
Since the *tests* package is included in :setting:`INSTALLED_APPS` when
|
||||
running your tests, you can define test-only models in its ``models.py``
|
||||
file.
|
||||
|
||||
If you are not using a management command to invoke the tests, you will
|
||||
also need to first setup Django itself using :func:`django.setup()`.
|
||||
|
||||
.. _other-testing-frameworks:
|
||||
|
||||
|
|
Loading…
Reference in New Issue