Ich versuche, eine Testabdeckung für eine Django-CMS-Implementierung zu erhalten, an der ich arbeite, und ich bin mir nicht sicher, wie ich Plugins/Extensions testen kann. Hat jemand das schon mal gemacht, und wenn ja, wie? Einige Beispiele wären großartig.Wie testet man Django-CMS Erweiterungen?
Antwort
Wenn ich Ihre Frage richtig verstanden habe, finden Sie Beispiele für Komponententests für Plugins im Modul cms/tests/plugins.py, das sich im Ordner Ihrer Installation von django-cms befindet.
Im Wesentlichen Sie Unterklasse CMSTestCase und verwenden Sie die Client-Klasse von django.test.client, um Anfragen an Ihren CMS und überprüfen Sie die resultierenden Antworten.
Informationen darüber, wie Sie den Client verwenden, können auf http://docs.djangoproject.com/en/dev/topics/testing/#module-django.test.client
Tests von cms/tests/plugins.py
wie Tests gezeigt, ist eher die Integration als Unit-Tests gefunden werden, und das ist ziemlich schwergewichtige und erfordern einen manchmal zu großen Teil des gesamten Systems up and running (nicht notwendig falsch, nur unpraktisch beim Debuggen).
DjangoCMS fest integriert ist, so, was ich hier sind, haben ein paar Techniken ‚näher an das Metall‘ und nicht als eine vollständige Lösung zu erhalten:
Sie benötigen einen -Stil gefälschte Klasse ‚Expando‘:
class Expando(object): # Never use in production!
def __init__(self, **kw):
self.__dict__.update(kw)
Um eine Instanz der Plugin-Klasse instanziiert:
from cms.plugin_pool import plugin_pool
# ..in production code: class YourPlugin(CMSPlugin)...
# This ensures that the system is aware of your plugin:
YrPluginCls = plugin_pool.plugins.get('YourPlugin', None)
# ..instantiate:
plugin = YrPluginCls()
Sanity die Plugins .render
Methode überprüfen:
ctx = plugin.render({}, Expando(attr1='a1', attr2=123), None)
mit tatsächlichen Vorlage übertragen, überprüft Ausgabe:
res = render_to_response(look.render_template, ctx)
# assert that attr1 exist in res if it should
# ..same for attr2
BeautifulSoup praktisch ist, wenn der Inhalt des kleinen DOM-Fragments zu validieren.
Verwenden Admin-Formularfelder indirekt, dass die Modellattribute überprüfen korrekt verhalten:
from django.test.client import RequestFactory
from django.contrib.auth.models import AnonymousUser
# ...
request = RequestFactory().get('/')
request.user = AnonymousUser()
a_field = plugin.get_form(request).base_fields['a_field']
a_field.validate('<some valid value>')
# Check that a_field.validate('<some invalid value>') raises
- 1. Wie man beide HTML-Seiten macht/testet/und/testet/testet
- 2. Wie testet man ein Webformular?
- 3. Wie testet man Enum-Typen?
- 4. Wie testet man jQuery-Tastaturereignisse?
- 5. Wie testet man die Ereignisauslösung?
- 6. Wie testet man mit MediatR
- 7. Wie testet man eine Webapplikation?
- 8. djangocms 3.2 Seite Ebene
- 9. django oscar und djangocms
- 10. djangocms KeyError: u '__ module__'
- 11. Lauf djangocms am Anfang
- 12. Wie kombinieren Prestashop (PHP) und DjangoCMS (Python)
- 13. Wie man eine Site rigoros testet?
- 14. Wie testet man die ETag Zwischenspeicherung?
- 15. Wie testet man eine Singleton-Klasse?
- 16. Wie testet man HTML-Attribute mit rspec?
- 17. Wie testet man eine HTTP 301-Weiterleitung?
- 18. Oauth - Wie testet man mit lokalen URLs?
- 19. Wie testet man mail() mit PHPUnit
- 20. Wie testet man nur eine Benchmark-Funktion?
- 21. Wie testet man eine Pundit Headless Policy?
- 22. Wie testet man einen lokalen Bot?
- 23. Wie testet man CSS/HTML/jQuery?
- 24. Wie testet man einen Bestätigungsdialog mit Gurke?
- 25. Wie testet man generische Kollektionen in Nunit?
- 26. Robolectric: Wie man eine SherlockActivity testet
- 27. Wie testet man die webrtc App?
- 28. Wie testet man Zustandsübergang in Winkel?
- 29. Wie testet man eine leere Enum Unit?
- 30. Wie testet man Intuit reconnect api?
+1, ich bin auch daran interessiert. –