2010-04-12 21 views
12

Üzerinde çalıştığım bir Django-CMS uygulaması için bazı test kapsamına girmeye çalışıyorum ve test eklentileri/uzantıları nasıl birimden emin olacağından emin değilim. Bunu daha önce kimse yaptı mı, eğer öyleyse, nasıl? Bazı örnekler harika olurdu.Django-CMS uzantıları nasıl test edilir?

+1

+1, ben de bu ilgileniyorum. –

cevap

2

Sorunuzu doğru bir şekilde anlarsam, django-cms yüklemenizi sürdüren klasörde bulunan cms/tests/plugins.py modülündeki eklentiler için birim testleri için örnekler bulabilirsiniz.

Temel olarak CMSTestCase alt sınıfını ve CMS'nize istekte bulunmak ve sonuçta oluşan yanıtları kontrol etmek için django.test.client'ten İstemci sınıfını kullanırsınız. cms/tests/plugins.py ile gösterildiği gibi istemci nasıl kullanılacağına dair

Bilgi birim testlerinden daha entegrasyon testlerinde oldukça olduğunu http://docs.djangoproject.com/en/dev/topics/testing/#module-django.test.client

4

Testleri bulunabilir ve bu da büyük ağır olduğunu ve bütün sistemin bir bazen çok büyük bir kısmını gerektirir yukarı ve koşma (hata ayıklama sırasında sadece gerekli değil, yanlış).

class Expando(object): # Never use in production! 
    def __init__(self, **kw): 
     self.__dict__.update(kw) 
: Bir 'EXPANDO' tarzı sahte sınıf ihtiyacım

:

DjangoCMS sıkıca yerine tam çözüm 'metale daha yakın' almak için burada var birkaç teknik ne nedenle entegre edilmiştir eklentileri kontrol .render yöntemi

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:

eklenti sınıfının bir örneğini için

ctx = plugin.render({}, Expando(attr1='a1', attr2=123), None) 

, fiili şablonla Render çıkışını kontrol edin: küçük DOM parçaların içeriği doğrulanırken

res = render_to_response(look.render_template, ctx) 
# assert that attr1 exist in res if it should 
# ..same for attr2 

BeautifulSoup kullanışlıdır.

Kullanım yönetici form alanları dolaylı olarak bu modelin özelliklerini kontrol etmek için doğru davranırlar:

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 
İlgili konular