(Очевидно) Невозможно добавить к кортежу. Почему тест django userena делает это? - PullRequest
1 голос
/ 29 февраля 2012

INSTALLED_APPS в django, очевидно, является кортежем и, следовательно, неизменным.

Почему django-userena пытается добавить к нему модуль во время выполнения?

Ссылка на пользователя / тесты / профили / test.py

from django import test

class ProfileTestCase(test.TestCase):
    """ A custom TestCase that loads the profile application for testing purposes """
    def _pre_setup(self):
        # Add the models to the db.
        self._original_installed_apps = list(settings.INSTALLED_APPS)
        settings.INSTALLED_APPS.append('userena.tests.profiles')
        loading.cache.loaded = False
        call_command('syncdb', interactive=False, verbosity=0)

        # Call the original method that does the fixtures etc.
        super(ProfileTestCase, self)._pre_setup()

    def _post_teardown(self):
        # Call the original method.
        super(ProfileTestCase, self)._post_teardown()
        # Restore the settings.
        settings.INSTALLED_APPS = self._original_installed_apps
        loading.cache.loaded = False

И, очевидно, когда я запускаю модульные тесты с userena, я получаю такие ошибки, как: -

======================================================================
ERROR: test_can_view_profile (userena.tests.models.BaseProfileModelTest)
Test if the user can see the profile with three type of users.
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./django-trunk/django/test/testcases.py", line 499, in __call__
    self._pre_setup()
  File "./_thirdparty/django-userena/userena/tests/profiles/test.py", line 11, in _pre_setup
    settings.INSTALLED_APPS.append('userena.tests.profiles')
AttributeError: 'tuple' object has no attribute 'append'

======================================================================
ERROR: test_get_full_name_or_username (userena.tests.models.BaseProfileModelTest)
Test if the full name or username are returned correcly
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./django-trunk/django/test/testcases.py", line 499, in __call__
    self._pre_setup()
  File "./_thirdparty/django-userena/userena/tests/profiles/test.py", line 11, in _pre_setup
    settings.INSTALLED_APPS.append('userena.tests.profiles')
AttributeError: 'tuple' object has no attribute 'append'

Как мне решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Я думаю, что это:

self._original_installed_apps = list(settings.INSTALLED_APPS)
settings.INSTALLED_APPS.append('userena.tests.profiles')

Должно быть

self._original_installed_apps = list(settings.INSTALLED_APPS)
settings.INSTALLED_APPS += ('userena.tests.profiles',)

Выглядит для меня как ошибка.

1 голос
/ 29 февраля 2012

INSTALLED_APPS по умолчанию tuple, но может быть изменено на list. Автор этого приложения, вероятно, изменил это для себя, написал тесты и не понял, что оно не будет работать для людей, у которых INSTALLED_APPS как tuple. Скорее всего, вы можете решить проблему, изменив settings.INSTALLED_APPS на list.

Кстати, есть лучшие способы переопределить настройки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...