summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--django/core/management/commands/test.py1
-rw-r--r--django/test/runner.py7
-rw-r--r--docs/intro/tutorial05.txt2
-rw-r--r--docs/releases/1.11.txt4
-rw-r--r--docs/topics/testing/advanced.txt12
-rw-r--r--tests/check_framework/models.py10
-rw-r--r--tests/check_framework/tests.py7
7 files changed, 42 insertions, 1 deletions
diff --git a/django/core/management/commands/test.py b/django/core/management/commands/test.py
index e94fd989f1..b1186f20fc 100644
--- a/django/core/management/commands/test.py
+++ b/django/core/management/commands/test.py
@@ -8,6 +8,7 @@ from django.test.utils import get_runner
class Command(BaseCommand):
help = 'Discover and run tests in the specified modules or the current directory.'
+ # DiscoverRunner runs the checks after databases are set up.
requires_system_checks = False
def __init__(self):
diff --git a/django/test/runner.py b/django/test/runner.py
index 8b4c608c08..487ec7c682 100644
--- a/django/test/runner.py
+++ b/django/test/runner.py
@@ -9,6 +9,7 @@ import unittest
import warnings
from importlib import import_module
+from django.core.management import call_command
from django.db import connections
from django.test import SimpleTestCase, TestCase
from django.test.utils import (
@@ -555,6 +556,11 @@ class DiscoverRunner(object):
verbosity=self.verbosity,
)
+ def run_checks(self):
+ # Checks are run after database creation since some checks require
+ # database access.
+ call_command('check', verbosity=self.verbosity)
+
def run_suite(self, suite, **kwargs):
kwargs = self.get_test_runner_kwargs()
runner = self.test_runner(**kwargs)
@@ -593,6 +599,7 @@ class DiscoverRunner(object):
self.setup_test_environment()
suite = self.build_suite(test_labels, extra_tests)
old_config = self.setup_databases()
+ self.run_checks()
result = self.run_suite(suite)
self.teardown_databases(old_config)
self.teardown_test_environment()
diff --git a/docs/intro/tutorial05.txt b/docs/intro/tutorial05.txt
index 438cb20045..c6e2827b6b 100644
--- a/docs/intro/tutorial05.txt
+++ b/docs/intro/tutorial05.txt
@@ -197,6 +197,7 @@ In the terminal, we can run our test::
and you'll see something like::
Creating test database for alias 'default'...
+ System check identified no issues (0 silenced).
F
======================================================================
FAIL: test_was_published_recently_with_future_question (polls.tests.QuestionMethodTests)
@@ -250,6 +251,7 @@ past:
and run the test again::
Creating test database for alias 'default'...
+ System check identified no issues (0 silenced).
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
diff --git a/docs/releases/1.11.txt b/docs/releases/1.11.txt
index 0bf77e6e2d..a895f40c5f 100644
--- a/docs/releases/1.11.txt
+++ b/docs/releases/1.11.txt
@@ -434,6 +434,10 @@ Tests
* Added support for :meth:`python:unittest.TestCase.subTest`’s when using the
:option:`test --parallel` option.
+* ``DiscoverRunner`` now runs the system checks at the start of a test run.
+ Override the :meth:`.DiscoverRunner.run_checks` method if you want to disable
+ that.
+
URLs
~~~~
diff --git a/docs/topics/testing/advanced.txt b/docs/topics/testing/advanced.txt
index 3cd60bc03c..192a62c516 100644
--- a/docs/topics/testing/advanced.txt
+++ b/docs/topics/testing/advanced.txt
@@ -402,12 +402,18 @@ testing behavior. This behavior involves:
#. Running ``migrate`` to install models and initial data into the test
databases.
+#. Running the :doc:`system checks </topics/checks>`.
+
#. Running the tests that were found.
#. Destroying the test databases.
#. Performing global post-test teardown.
+.. versionchanged:: 1.11
+
+ Running the system checks was added.
+
If you define your own test runner class and point :setting:`TEST_RUNNER` at
that class, Django will execute your test runner whenever you run
``./manage.py test``. In this way, it is possible to use any test framework
@@ -566,6 +572,12 @@ Methods
Creates the test databases by calling
:func:`~django.test.utils.setup_databases`.
+.. method:: DiscoverRunner.run_checks()
+
+ .. versionadded:: 1.11
+
+ Runs the :doc:`system checks </topics/checks>`.
+
.. method:: DiscoverRunner.run_suite(suite, **kwargs)
Runs the test suite.
diff --git a/tests/check_framework/models.py b/tests/check_framework/models.py
index 3b17332411..fe573fce84 100644
--- a/tests/check_framework/models.py
+++ b/tests/check_framework/models.py
@@ -1,9 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
+from django.core.checks import register
from django.db import models
class SimpleModel(models.Model):
field = models.IntegerField()
manager = models.manager.Manager()
+
+
+@register('tests')
+def my_check(app_configs, **kwargs):
+ my_check.did_run = True
+ return []
+
+
+my_check.did_run = False
diff --git a/tests/check_framework/tests.py b/tests/check_framework/tests.py
index 26ce929655..a64ef206ad 100644
--- a/tests/check_framework/tests.py
+++ b/tests/check_framework/tests.py
@@ -17,7 +17,7 @@ from django.test.utils import (
from django.utils.encoding import force_text
from django.utils.six import StringIO
-from .models import SimpleModel
+from .models import SimpleModel, my_check
class DummyObj(object):
@@ -303,3 +303,8 @@ class CheckFrameworkReservedNamesTests(SimpleTestCase):
),
]
self.assertEqual(errors, expected)
+
+
+class ChecksRunDuringTests(SimpleTestCase):
+ def test_registered_check_did_run(self):
+ self.assertTrue(my_check.did_run)