У меня есть проект Django (1.10.2) («theproject») и некоторые из них ведут себя (0.4.0). Я использовал behave-django. python manage.py behave
работ. Тем не менее, PyCharm (which uses the behave
executable rather than a Django management command) doesn't know how to run my features, поэтому я пытаюсь использовать behave's documented "manual integration" with Django.Почему не документирована ручная интеграция с Django?
Мой весь features/environment.py
:
import os
import django
from django.test.runner import DiscoverRunner
from django.test.testcases import LiveServerTestCase
from splinter.browser import Browser
os.environ["DJANGO_SETTINGS_MODULE"] = "theproject.settings"
def before_all(context):
django.setup()
context.test_runner = DiscoverRunner()
context.test_runner.setup_test_environment()
context.old_db_config = context.test_runner.setup_databases()
context.browser = Browser('phantomjs')
# When we're running with PhantomJS we need to specify the window size.
# This is a workaround for an issue where PhantomJS cannot find elements
# by text - see: https://github.com/angular/protractor/issues/585
if context.browser.driver_name == 'PhantomJS':
context.browser.driver.set_window_size(1280, 1024)
def before_scenario(context, _):
context.test_case = LiveServerTestCase
context.test_case.setUpClass()
def after_scenario(context, _):
context.test_case.tearDownClass()
del context.test_case
def after_all(context):
context.test_runner.teardown_databases(context.old_db_config)
context.test_runner.teardown_test_environment()
context.browser.quit()
del context.browser
Вот INSTALLED_APPS
от theproject/setting.py
в случае, если это полезно (я удалил 'behave-django'
для этого эксперимента):
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_extensions',
'oauth2_provider',
'push_notifications',
'raven.contrib.django.raven_compat',
'rest_framework',
'app1.apps.App1Config',
'app2',
'django.contrib.admin' # Must follow apps for apps' models to appear in admin UI
]
Когда я бегу behave
я получаю
Exception AppRegistryNotReady: Apps aren't loaded yet.
Traceback (most recent call last):
File "/usr/local/bin/behave", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/site-packages/behave/__main__.py", line 109, in main
failed = runner.run()
File "/usr/local/lib/python2.7/site-packages/behave/runner.py", line 672, in run
return self.run_with_paths()
File "/usr/local/lib/python2.7/site-packages/behave/runner.py", line 678, in run_with_paths
self.load_step_definitions()
File "/usr/local/lib/python2.7/site-packages/behave/runner.py", line 658, in load_step_definitions
exec_file(os.path.join(path, name), step_module_globals)
File "/usr/local/lib/python2.7/site-packages/behave/runner.py", line 304, in exec_file
exec(code, globals, locals)
File "features/steps/common.py", line 5, in <module>
from django.contrib.auth.models import User
File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/models.py", line 4, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/usr/local/lib/python2.7/site-packages/django/contrib/auth/base_user.py", line 52, in <module>
class AbstractBaseUser(models.Model):
File "/usr/local/lib/python2.7/site-packages/django/db/models/base.py", line 105, in __new__
app_config = apps.get_containing_app_config(module)
File "/usr/local/lib/python2.7/site-packages/django/apps/registry.py", line 237, in get_containing_app_config
self.check_apps_ready()
File "/usr/local/lib/python2.7/site-packages/django/apps/registry.py", line 124, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
Как этот способ интеграции django и поведения должен работать?
Что-то я попробовал, не работает (или не совсем): Я переехал django.setup()
на верхний уровень environment.py
, сразу же после установки DJANGO_SETTINGS_MODULE
. Это фиксирует AppRegistryNotReady
, но многие сценарии завершаться
IntegrityError: duplicate key value violates unique constraint "auth_user_username_key"
DETAIL: Key (username)=(username) already exists.
Под вести себя-Джанго транзакция была начата перед каждым scenarion и откат после; что, похоже, сейчас не происходит. LiveServerTestCase
расширяет TransactionTestCase
, поэтому я озадачен.
** AppRegistryNotReady: Приложения еще не загружены. ** Эта ошибка возникает, когда приложения в установках INSTALLED_APPS не находятся в правильной иерархии. Я предлагаю вам проверить это. Если проблема по-прежнему сохраняется, пожалуйста, поделитесь настройками INSTALLED_APPS. –
Также проверьте ответы на этот вопрос http://stackoverflow.com/questions/26276397/django-1-7-upgrade-error-appregistrynotready-apps-arent-loaded-yet и http://stackoverflow.com/questions/ 33186413/djangodjango-core-exceptions-appregistrynotready-apps-arent-loaded-yet –
Спасибо за первое предложение, но мое приложение запускается, мои тесты django.test.TestCase проходят, и, когда я использую, когда я использую behave-django, мои действия ведут себя, поэтому кажется, что INSTALLED_APPS должен быть в порядке. Верный? –