summaryrefslogtreecommitdiff
path: root/tests/test_runner
diff options
context:
space:
mode:
authorChris Jerdonek <chris.jerdonek@gmail.com>2021-03-26 05:14:43 -0700
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-03-30 10:26:20 +0200
commit038940cf5525c41464a1b9e9ba3801042320b0cc (patch)
tree0972792e73a02a8b60ff86c22aa7cab46b956390 /tests/test_runner
parent7c08f26bf0439c1ed593b51b51ad847f7e262bc1 (diff)
Fixed #29127 -- Prevented DiscoverRunner from hiding tagged test with syntax errors.
This mades _FailedTest objects always match tags in DiscoverRunner.
Diffstat (limited to 'tests/test_runner')
-rw-r--r--tests/test_runner/test_discover_runner.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/test_runner/test_discover_runner.py b/tests/test_runner/test_discover_runner.py
index 366d180aa5..6b19f2f274 100644
--- a/tests/test_runner/test_discover_runner.py
+++ b/tests/test_runner/test_discover_runner.py
@@ -2,6 +2,7 @@ import os
import unittest.loader
from argparse import ArgumentParser
from contextlib import contextmanager
+from importlib import import_module
from unittest import TestSuite, TextTestRunner, defaultTestLoader, mock
from django.db import connections
@@ -259,6 +260,18 @@ class DiscoverRunnerTests(SimpleTestCase):
self.assertEqual(count_tests(tags=['foo'], exclude_tags=['bar', 'baz']), 1)
self.assertEqual(count_tests(exclude_tags=['foo']), 0)
+ def test_tag_fail_to_load(self):
+ with self.assertRaises(SyntaxError):
+ import_module('test_runner_apps.tagged.tests_syntax_error')
+ runner = DiscoverRunner(tags=['syntax_error'])
+ # A label that doesn't exist or cannot be loaded due to syntax errors
+ # is always considered matching.
+ suite = runner.build_suite(['doesnotexist', 'test_runner_apps.tagged'])
+ self.assertEqual([test.id() for test in suite], [
+ 'unittest.loader._FailedTest.doesnotexist',
+ 'unittest.loader._FailedTest.test_runner_apps.tagged.tests_syntax_error',
+ ])
+
def test_included_tags_displayed(self):
runner = DiscoverRunner(tags=['foo', 'bar'], verbosity=2)
with captured_stdout() as stdout: