Как перебрать все объекты View для всех маршрутов в django в модульном тесте?
По соображениям соответствия иногда возникает необходимость гарантировать, что все или некоторые представления должны иметь определенные атрибуты или поведение. Я хочу добавить тесты, чтобы убедиться, что это соблюдается, и, что более важно, что это будет соблюдаться в отношении будущих представлений, добавленных другими разработчиками.
Мне нужно уметь делать что-то вроде
def test_compliance_thing():
for all possible views
assert hasattr(view, 'some_compliance_thing')
from django.urls import get_resolver
def get_all_view_classes():
return (x.callback.view_class for x in get_resolver().url_patterns if x.callback)
def test_compliance_thing():
for view in get_all_view_classes():
assert hasattr(view, 'some_compliance_thing')
Интересно, что я нашел другой способ сделать это, который, как мне кажется, дает тот же результат
>>> x1 = set([x.callback.view_class for x in get_resolver().url_patterns if x.callback])
>>> x2 = set([k.view_class for k in get_resolver().reverse_dict.keys() if type(k) != str])
>>> x1 == x2
True