2013-02-27 46 views
3

我已按照Django docs程序作一些Django的CMS插件可重複使用,和Hitchhiker's guide to packaging把他們PyPI上的Django-CMS插件,所以他們通過如何測試封裝成一個可重複使用的應用程序

pip install cmsplugin-rt 
可用

這將它們安裝在python可以找到它們的地方。當然,我還有其他地方的開發目錄。

但是當我添加一些測試,這個包,我得到的錯誤:需要

django.core.exceptions.ImproperlyConfigured: App with label cmsplugin_rt could not be found 

一些更多的解釋。由於該軟件包不是Django項目的一部分,即沒有manage.py文件來運行測試,我按照建議here at stackoverflow並將runtests.py添加到tests目錄。特別是在這個文件中,我把:

import os, sys 
from django.conf import settings 

DIRNAME = os.path.dirname(__file__) 
settings.configure(DEBUG=True, 
    DATABASES={ 
     'default': { 
      'ENGINE': 'django.db.backends.sqlite3', 
     } 
    }, 
    CMS_TEMPLATES = (('template_for_tests.html', 'Test template'),), 
    CMS_MODERATOR = False, 
    CMS_PERMISSION = False, 
    TEMPLATE_CONTEXT_PROCESSORS = (
     'django.contrib.auth.context_processors.auth', 
     'django.core.context_processors.i18n', 
     'django.core.context_processors.request', 
     'django.core.context_processors.media', 
     'django.core.context_processors.static', 
     'cms.context_processors.media', 
     'sekizai.context_processors.sekizai', 
    ), 
    INSTALLED_APPS = (
     'cmsplugin_rt.button', 
     'django.contrib.auth', 
     'django.contrib.contenttypes', 
     'django.contrib.sessions', 
     'django.contrib.admin', 
     'django.contrib.sites', 
     'django.contrib.messages', 
     'django.contrib.staticfiles', 
     'south', 
     'cms', 
     'mptt', 
     'menus', 
     'sekizai', 
    ), 
) 

from django.test.simple import DjangoTestSuiteRunner 
test_runner = DjangoTestSuiteRunner(verbosity=2) 
failures = test_runner.run_tests(['cmsplugin_rt', ]) 
if failures: 
    sys.exit(failures) 

所以,正如我所說,當我執行python runtests.py我得到的錯誤:

django.core.exceptions.ImproperlyConfigured: App with label cmsplugin_rt could not be found 

我要去哪裏錯了?還是有更好的方法來做到這一點?我很想在那裏進行一些測試!

謝謝!

(如果沒有運行,將測試運行使用我的包的開發版本,或者他們會拉在從PIP版本安裝?我是否需要pip uninstall cmsplugin-rt每次運行前?)

這裏我的目錄結構 - 我在一個包中有幾個插件,這可能是問題的一部分。正如你在這裏看到的那樣,我把tests目錄,儘管我也嘗試了一級。

cmsplugin-rt/ 
--README.txt 
--LICENSE.txt 
--MANIFEST.in 
--setup.py 
--cmsplugin_rt/ 
----__init__.py 
----models.py 
----button/ 
------__init__.py 
------models.py 
------cms_plugins.py 
------templates/ 
----(other plugins)/ 
----tests/ 
------runtests.py 
------mytests.py 

爲了安全起見我也把一個空models.py在頂層(以下建議here),但我不知道這有什麼差別。

+0

當我修改我的可重用應用程序時,我遇到了另一個問題 - 如何讓南遷移保持最新狀態?由於沒有manage.py,我無法在上述目錄中運行./manage.py schemamigration。目前我的工作是將目錄(例如上面的按鈕)複製到現有項目中,在那裏使用manage.py,然後複製遷移文件夾......必須有更好的方法! – 2013-02-27 03:56:52

+0

您是否嘗試在INSTALLED_APPS中的'cms'之後附加您的cmsplugin? – 2013-03-04 10:56:26

+0

有趣的問題!不,我有cmsplugin_rt.button在INSTALLED_APPS中cms之前...如果我將它移動後,你期望有什麼區別? – 2013-03-05 00:43:59

回答

2

對於後人來說,這裏是我對我在第一條評論中提到的南遷移問題的解決方法。這不太好,所以我很樂意提出改進的建議。

到一個新的字段添加到cmsplugin_rt.button模型的過程是:

  1. 進行任何編輯之前,複製site-packages/cmsplugin_rt/button成一個虛擬的Django-CMS項目作爲所謂button
  2. 刪除應用這一新應用程序的button/migrations/目錄
  3. 添加button到虛擬項目settings.py的INSTALLED_APPS
  4. 運行./manage.py schemamigration --init button,所以僞項目的理解Ø F中的數據庫與現款車型(作出任何改變之前)
  5. 運行./manage.py migrate button對齊,以更新虛擬項目的數據庫
  6. 編輯按鈕的model.py文件中的虛擬項目中添加額外的領域,並作出其他任何您需要的更改。
  7. 運行./manage.py schemamigration --auto button,生成遷移代碼。這將在button/migrations/0002_auto__...
  8. 這個文件是你需要放在你的包中,但是如果插件最初的移植文件不僅僅是0001_initial.py,它將在前面有錯誤的編號。將它用正確的編號複製到您的軟件包開發目錄中。同時複製您所做的任何模型,cms_plugin,模板和其他更改。
+0

另外我剛剛在https://github.com/jezdez/django-discover-runner上找到了測試可重用應用程序的一節,雖然我還沒有嘗試過。 – 2013-08-08 00:35:41

相關問題