encode / django-rest-framework

Web APIs for Django. 🎸
https://www.django-rest-framework.org
Other
27.83k stars 6.76k forks source link

tests: Check urlpatterns after cleanups #9400

Closed stanislavlevin closed 1 month ago

stanislavlevin commented 2 months ago

According to docs: https://docs.python.org/3/library/unittest.html#unittest.TestCase.addClassCleanup

Add a function to be called after tearDownClass() to cleanup resources used during the test class. Functions will be called in reverse order to the order they are added (LIFO).

This was revealed with recent change in pytest (8.2.0):

pytest-dev/pytest#11728: For unittest-based tests, exceptions during class cleanup (as raised by functions registered with TestCase.addClassCleanup) are now reported instead of silently failing.

check_urlpatterns is called before cleanup_url_patterns and fails (problem was hidden by pytest < 8.2.0).

doClassCleanups can be used instead to check after-cleanup state:

https://docs.python.org/3/library/unittest.html#unittest.TestCase.doClassCleanups

This method is called unconditionally after tearDownClass(), or after setUpClass() if setUpClass() raises an exception.

It is responsible for calling all the cleanup functions added by addClassCleanup(). If you need cleanup functions to be called prior to tearDownClass() then you can call doClassCleanups() yourself.

Fixes: https://github.com/encode/django-rest-framework/issues/9399