如何测试打包为可重用应用的Django-CMS插件
我按照Django文档中的步骤,制作了一些可以重复使用的Django-CMS插件,并参考了打包指南把它们放到了pypi上,这样就可以通过
pip install cmsplugin-rt
来安装它们,这样Python就能找到它们。当然,我的开发目录是在其他地方。
但是,当我给这个包添加一些测试时,我遇到了错误:
django.core.exceptions.ImproperlyConfigured: App with label cmsplugin_rt could not be found
需要更多的解释。因为这个包不是Django项目的一部分,也就是说没有manage.py
文件来运行测试,所以我按照StackOverflow上的建议,在tests
目录下添加了runtests.py
文件。在这个文件里,我放了:
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
(按照这里的建议),但我不确定这是否有区别。
1 个回答
2
为了后续参考,这里是我解决我在第一条评论中提到的南迁移问题的临时方案。虽然这个方法不太美观,但我很希望能听到任何改进的建议。
向 cmsplugin_rt.button
模型添加新字段的步骤如下:
- 在进行任何编辑之前,先把
site-packages/cmsplugin_rt/button
复制到一个虚拟的 Django-CMS 项目中,命名为button
的应用。 - 删除这个新应用的
button/migrations/
目录。 - 在虚拟项目的
settings.py
文件中,把button
添加到 INSTALLED_APPS 列表里。 - 运行
./manage.py schemamigration --init button
,这样虚拟项目对数据库的理解就和当前模型一致(在做任何更改之前)。 - 运行
./manage.py migrate button
,以更新虚拟项目的数据库。 - 在虚拟项目中编辑按钮的
model.py
文件,添加额外的字段,并进行其他需要的更改。 - 运行
./manage.py schemamigration --auto button
,生成迁移代码。这个代码会保存在button/migrations/0002_auto__...
文件中。 - 这个文件是你需要放入你包里的,但如果插件最开始有的不止
0001_initial.py
这个迁移文件,前面的数字会是错误的。把它复制到你的包开发目录中,并确保数字是正确的。同时,复制你所做的任何模型、cms_plugin、模板和其他更改。