nedbat / django_coverage_plugin

A plugin for coverage.py to measure Django template execution
Apache License 2.0
197 stars 35 forks source link

Fix template tags missing when the tags module is imported during test collection #64

Closed izquierdo closed 3 years ago

izquierdo commented 5 years ago

I'm hitting this error

django.template.exceptions.TemplateSyntaxError: 'l10n' is not a registered tag library.

when trying to load Django's l10n library in a template while using pytest and django_coverage_plugin. Tests pass when the plugin is not used. This started happening after adding from django.templatetags.l10n import localize to a test module.

This happens in Python 3.6 with Django 1.11.

From my investigation of the issue, it's triggered in the following way:

I believe the root issue here is that check_debug() is trying to import template engines too early and that the if not apps.ready: check is not enough. Unfortunately I couldn't find any other way to detect that the engines have been loaded other than by looking at the internal variable _engines.

Can confirm that this fixes https://github.com/nedbat/django_coverage_plugin/issues/63 using the test case attached there.

Wasn't able to add a test to this PR as the bug depends on pytest's collector.

nedbat commented 3 years ago

Thanks, I've cherry-picked the fix commit as 6622791.