Ошибки теста Джанго

Я нахожусь в процессе написания модульных тестов для приложения, над которым я работаю. Мои тесты хорошо работают на моем Macbook Pro 2012 года, но не на iMac 2015 года. Оба работают под управлением последней версии OSX, а версия django - это версия 1.9.1 с пользовательскими изменениями, которые можно увидеть здесь: https://github.com/shuttl-io/django. Изменения в механизмах загрузки шаблонов.

Прежде чем я продолжу, мои тесты организованы следующим образом:

app/
    tests/
        test_models/
           __init__.py
           test_*.py
        test_views/
            __init__.py
            test_*.py
        test_forms/
            test_*.py
            __init__.py

И в тех __init__ файлы, которые я включаю все test_*.py файлы.

В любом случае, в моих тестах у меня есть несколько фиктивных классов внутри тестового файла test_models. Похоже, что мой 2012 MbP выполнит миграцию и перенесет тестовую базу данных с фиктивными классами в тестовую базу данных. Мой тестовый файл выглядит так: http://pastebin.com/m9VKDLhE. Как и на моем iMac, фиктивные классы в верхней части моего файла не переносятся. Поэтому я прочитал об этой проблеме и решил добавить приложение для тестирования, которое было где-то написано. Тесты имеют одинаковую организацию, а фиктивные классы перемещены в models.py. Затем в моем файле settings.py у меня есть этот фрагмент:

if "test" in sys.argv:
    INSTALLED_APPS.append("testing")
    if "makemigrations" in sys.argv:
        ndx = sys.argv.index("test")
        sys.argv.pop(ndx)
        pass
    pass

Основано на фрагменте, размещенном здесь: https://code.djangoproject.com/ticket/7835

Теперь это работает и помещает фиктивные файлы в БД и избавляется от OperationalError. Однако это добавляет более сложные ошибки, о которых я не знаю.

Прежде чем говорить об ошибках, вот класс, который вызывает ошибки: http://pastebin.com/n3906RC8. Публикуемый класс, от которого он наследуется, не является моделью, а представляет собой абстрактный базовый класс с несколькими методами, которые необходимо реализовать.

Теперь ошибки, которые я получил первоначально, были этой ошибкой:

======================================================================
ERROR: test_renderSite (testing.tests.test_webpage.test_models.test_webpage.WebsiteTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/Yoseph/shuttl/testing/tests/test_webpage/test_models/test_webpage.py", line 80, in test_renderSite
    siteMap = self.website.getSiteMap()
  File "/Users/Yoseph/shuttl/Webpage/models.py", line 155, in getSiteMap
    return self.root.render()
  File "/Users/Yoseph/shuttl/Webpage/models.py", line 252, in render
    for i in self.children:
  File "/Users/Yoseph/shuttl/Webpage/models.py", line 240, in children
    for i in Class.objects.filter(parent=self):
  File "/Users/Yoseph/.venv/shuttl/src/django/django/db/models/manager.py", line 122, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/Yoseph/.venv/shuttl/src/django/django/db/models/query.py", line 790, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/Users/Yoseph/.venv/shuttl/src/django/django/db/models/query.py", line 808, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/Users/Yoseph/.venv/shuttl/src/django/django/db/models/sql/query.py", line 1243, in add_q
    clause, _ = self._add_q(q_object, self.used_aliases)
  File "/Users/Yoseph/.venv/shuttl/src/django/django/db/models/sql/query.py", line 1269, in _add_q
    allow_joins=allow_joins, split_subq=split_subq,
  File "/Users/Yoseph/.venv/shuttl/src/django/django/db/models/sql/query.py", line 1174, in build_filter
    self.check_related_objects(field, value, opts)
  File "/Users/Yoseph/.venv/shuttl/src/django/django/db/models/sql/query.py", line 1071, in check_related_objects
    self.check_query_object_type(value, opts, field)
  File "/Users/Yoseph/.venv/shuttl/src/django/django/db/models/sql/query.py", line 1055, in check_query_object_type
    (value, opts.object_name))
ValueError: Cannot query "root": Must be "Directory" instance.

Я распечатал тип, и это экземпляр каталога. Я решил эту проблему, изменив для i в Class.objects.filter (parent = self): на для i в Class.objects.filter (parent_id = self.id): это исправило эту ошибку, но вызвало другую ошибку, которая сделала еще меньше смысл:

======================================================================
ERROR: test_renderSite (testing.tests.test_webpage.test_models.test_webpage.WebsiteTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/Yoseph/shuttl/testing/tests/test_webpage/test_models/test_webpage.py", line 90, in test_renderSite
    self.assertEqual(self.website.getSiteMap(), testMap)
  File "/Users/Yoseph/shuttl/Webpage/models.py", line 155, in getSiteMap
    return self.root.render()
  File "/Users/Yoseph/shuttl/Webpage/models.py", line 253, in render
    renderMap["children"].append(i.render())
AttributeError: 'Directory' object has no attribute 'render'

----------------------------------------------------------------------

Если вы обратитесь ко второму каталогу, вы заметите, что класс Directory действительно имеет метод render. Я полностью в тупике. У вас есть какие-нибудь догадки? Заранее спасибо.

Тестовый файл: http://pastebin.com/m9VKDLhE Фрагмент модели: http://pastebin.com/n3906RC8

Я также разместил этот вопрос в группе пользователей django здесь: https://groups.google.com/forum/

0 ответов

Другие вопросы по тегам