Django测试错误

Django测试错误,django,unit-testing,python-3.x,django-unittest,Django,Unit Testing,Python 3.x,Django Unittest,我正在为正在开发的应用程序编写单元测试。我的测试在2012年的Macbook pro上运行良好,但在2015年的iMac上运行不好。这两个版本都运行最新的OSX,django版本为1.9.1,并进行了自定义修改,可以在此处看到:。修改模板加载机制的位置 在我继续之前,我的测试是这样组织的: app/ tests/ test_models/ __init__.py test_*.py test_views/

我正在为正在开发的应用程序编写单元测试。我的测试在2012年的Macbook pro上运行良好,但在2015年的iMac上运行不好。这两个版本都运行最新的OSX,django版本为1.9.1,并进行了自定义修改,可以在此处看到:。修改模板加载机制的位置

在我继续之前,我的测试是这样组织的:

app/
    tests/
        test_models/
           __init__.py
           test_*.py
        test_views/
            __init__.py
            test_*.py
        test_forms/
            test_*.py
            __init__.py
在那些
\uuuu init\uuuu
文件中,我包含了所有
测试*.py
文件

无论如何,在我的测试中,在测试模型的测试文件中有几个模拟类。看起来我的2012 MbP将进行迁移,并将带有模拟类的测试数据库迁移到测试数据库中。我的测试文件如下所示:。然而,在我的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
根据此处发布的代码片段:

现在它可以工作了,并将模拟文件放入数据库中,从而消除了错误。然而,这增加了我不知道的更复杂的错误

在讨论错误之前,下面是导致错误的类: . 它从中继承的可发布类不是一个模型,只是一个抽象基类,其中包含一些需要实现的方法

我最初遇到的错误是:

======================================================================
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.
我打印出了类型,它是一个目录实例。我通过将Class.objects.filter(parent=self)中的for I更改为Class.objects.filter(parent\u id=self.id)中的for I解决了这个问题:这修复了该错误,但导致了一个不同的错误,甚至没有意义:

======================================================================
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'

----------------------------------------------------------------------
如果参考第二个pastebin,您会注意到Directory类实际上有一个render方法。我完全被难住了。你们猜到了吗? 提前谢谢

测试文件: 模型代码段:


我还在django用户组中发布了这个问题:

作为一般观察,我不确定修改core django是否可取,除非不这样做你绝对无法实现你想要的——而且像自定义模板加载这样的事情肯定可以在不修改core的情况下完成。我做了一个自定义模板加载程序。导致我修改django core的问题是,我正在根据数据库中的路径加载实际文件。这也仅限于某些领域。因此,可以将一个名为hello.txt的文件上载到域X,但django可以将其另存为fileToUpload_xyz123.txt。但是用户知道该文件名为hello.txt,并且希望在域X上查看该文件。我修改了模板加载机制,以获取域参数。我试图将域添加到template_dirs列表中,但这是一个黑客行为,导致了更多的麻烦。请将.txt文件替换为.html文件,因为我使用的是模板,而不是txt文件。我的自定义修复程序解决的问题是修复扩展标记。根据一般观察,我不确定是否建议修改core Django,除非不这样做您绝对无法实现您想要的目标,而且自定义模板加载之类的事情肯定可以在不修改core的情况下完成。我做了一个自定义模板加载程序。导致我修改django core的问题是,我正在根据数据库中的路径加载实际文件。这也仅限于某些领域。因此,可以将一个名为hello.txt的文件上载到域X,但django可以将其另存为fileToUpload_xyz123.txt。但是用户知道该文件名为hello.txt,并且希望在域X上查看该文件。我修改了模板加载机制,以获取域参数。我试图将域添加到template_dirs列表中,但这是一个黑客行为,导致了更多的麻烦。请将.txt文件替换为.html文件,因为我使用的是模板,而不是txt文件。我的自定义修复修复的问题是修复扩展标记。