Browse Source

Fixed #25415 -- Made DiscoverRunner run system checks.

Adam Chainz 9 years ago
parent
commit
5eff8a7783

+ 1 - 0
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):

+ 7 - 0
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()

+ 2 - 0
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

+ 4 - 0
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
 ~~~~
 

+ 12 - 0
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.

+ 10 - 0
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

+ 6 - 1
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)